我正在使用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()赋予值)。
答案 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
编译(是的,这是多余的)时,没有警告或错误。