我使用gcc 4.5编译Linux内核模块。我只是注意到我有一些看起来像这样的代码:
#define NODE_ID "string_here"
int foot(int a) {
/* snip */
NODE_ID;
NODE_ID;
/* snip */
return 0;
}
我有这两个无效的语句,编译器从不会生成警告告诉我它们。为什么是这样?我想知道在我的项目中是否有其他类似的陈述,我还没有找到。
答案 0 :(得分: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
以获得更多,但这些有时会为代码提供误报,这对您的构建过程添加额外的噪音非常好。所以明智地使用它们。