GCC Wunused-variable предупреждает об используемой переменной - PullRequest
0 голосов
/ 17 января 2019

Я использую GCC версии 8.2 В нескольких частях кода я использую небольшие функции. У каждой функции есть тесты (то есть тесты инфраструктуры Unity). Тесты определяются как макросы #define, которые тестируют очень специфические вещи. Например, если число положительное.

Теперь при компиляции кода с использованием флага -Wextra я получаю предупреждение о неиспользуемых переменных, хотя я использую их в определенных макросах.

Вопрос в том, что GCC не распознает макрос как переменную или я что-то упустил?

Пример:

    #define compare(a,b) ( ((a) == (b)) ? 1 : 0 )
    ...
    void f() {
        int a;
        a = f1();
        if(compare(a,123))
            printf("It works");
    }

В этом случае GCC выдаст предупреждение о неиспользуемой переменной a, хотя она используется макросом (помимо присвоения значения функцией f1 ()).

1 Ответ

0 голосов
/ 17 января 2019

Это не так, по крайней мере, с примером, который вы предоставили. Вот минимальная, полная и проверяемая демонстрация:

#include <stdio.h>

#define compare(a,b) ( ((a) == (b)) ? 1 : 0 )

int f1() {
    return 42;
}

void f() { // your code
    int a;
    a = f1();
    if (compare(a, 123))
        printf("It works");
}

int main(int argc, char *argv[]) {
    f();
    return 0;
}

При компиляции с gcc -Wall -Wunused (да, это избыточно) с использованием gcc 8.2 или 7.3 нет предупреждений или ошибок.

...