我正在使用 gcc 4.5 编译 Linux 内核模块。我刚刚注意到我有一些看起来像这样的代码:
#define NODE_ID "string_here"
int foot(int a) {
/* snip */
NODE_ID;
NODE_ID;
/* snip */
return 0;
}
我有这两个无效语句,编译器从不生成警告告诉我它们。为什么是这样?我想知道我的项目中是否还有其他类似的声明我还没有找到。
我正在使用 gcc 4.5 编译 Linux 内核模块。我刚刚注意到我有一些看起来像这样的代码:
#define NODE_ID "string_here"
int foot(int a) {
/* snip */
NODE_ID;
NODE_ID;
/* snip */
return 0;
}
我有这两个无效语句,编译器从不生成警告告诉我它们。为什么是这样?我想知道我的项目中是否还有其他类似的声明我还没有找到。
它确实警告你,你只是没有听 - 正如@Mat 在评论中所说,你需要启用-Wall
option,它会警告你:
$ gcc test.c -c -Wall
test.c: In function ‘foot’:
test.c:5:5: warning: statement with no effect
test.c:6:5: warning: statement with no effect
或者,您可以仅启用-Wunused-value
此警告的选项,但我强烈建议使用-Wall
,其中包括此警告和许多其他有用的警告。您还可以启用-Wextra
甚至-pedantic
更多,但这些有时会给完全没问题的代码带来误报,从而为您的构建过程增加额外的噪音。所以要明智地使用它们。