这是我的代码:
#include <stdio.h>
int main() {
int a[10];
for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
我使用的是GCC 5.1.1(Redhat)。 我记得当我在GCC中使用此代码时,我收到有关已签名和未签名的警告。那么为什么我在GCC 5.1.1中使用它时没有任何警告? 我希望有人可以帮我解释一下这个问题。非常感谢!
答案 0 :(得分:2)
您需要添加
-Wextra
到你的编译标志。
答案 1 :(得分:1)
要启用的正确警告选项为-Wsign-compare
,默认情况下不会包含此选项,也不会包含在-Wall
中。 -Wsign-compare
也启用了-Wextra
,因此请使用-Wsign-compare
或-Wextra
。有关信息,C不需要任何诊断来比较有符号和无符号操作数。
我记得当我在GCC中使用此代码时,我收到有关签名和未签名的警告。
我试过gcc
4.8.1而-Wsign-compare
中也没有-Wall
。
来自gcc
documentation:
-Wsign-比较
当有符号值转换为无符号值时,有符号值与无符号值之间的比较会产生错误结果时发出警告。 -Wxtra也启用了此警告;要在没有此警告的情况下获取-Wextra的其他警告,请使用-Wextra -Wno-sign-compare。