GCC Wunused变量警告已使用的变量

时间:2019-01-17 20:18:46

标签: c gcc compiler-flags

我正在使用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 :(得分:2)

情况并非如此,至少对于您提供的示例而言。这是一个Minimal, Complete, and Verifiable演示:

#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 8.2或7.3用gcc -Wall -Wunused编译(是的,这是多余的)时,没有警告或错误。