GCC Wunused-variable 对使用过的变量发出警告

GCC Wunused-variable warns for used variable

我使用的是 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() 赋予一个值之外)。

情况并非如此,至少对于您提供的示例而言。这是一个 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(是的,这是多余的)编译时没有警告或错误。