0

我正在使用 gcc 4.5 编译 Linux 内核模块。我刚刚注意到我有一些看起来像这样的代码:

#define NODE_ID      "string_here"

int foot(int a) {
    /* snip */
    NODE_ID;
    NODE_ID;
    /* snip */
    return 0;
}

我有这两个无效语句,编译器从不生成警告告诉我它们。为什么是这样?我想知道我的项目中是否还有其他类似的声明我还没有找到。

4

1 回答 1

0

它确实警告你,你只是没有听 - 正如@Mat 在评论中所说,你需要启用-Walloption,它会警告你:

$ 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更多,但这些有时会给完全没问题的代码带来误报,从而为您的构建过程增加额外的噪音。所以要明智地使用它们。

于 2013-06-26T20:45:55.353 回答