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