GCC linux 5.1在比较有符号和无符号整数时不会发出警告
这是我的代码:GCC linux 5.1在比较有符号和无符号整数时不会发出警告,c,linux,gcc,C,Linux,Gcc,这是我的代码: #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; } #包括 int main(){ INTA[10]; 对于(int i=0
#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;
}
#包括
int main(){
INTA[10];
对于(int i=0;i
I使用GCC 5.1.1(Redhat)。
我记得当我在GCC lower中使用这段代码时,我得到了一个关于有符号和无符号的警告。那么为什么在GCC 5.1.1中使用它时没有警告呢?
我希望有人能帮我解释这个问题。非常感谢 您需要添加
-Wextra
添加到编译标志。您需要添加
-Wextra
要启用的正确警告选项是
-Wsign compare
,默认情况下不包括该选项,也不包括在-Wall
中-Wsign compare
也由-Wextra
启用,因此可以使用-Wsign compare
或-Wextra
。作为参考,C不需要任何诊断来比较有符号操作数和无符号操作数
我记得当我在GCC lower中使用这段代码时,我得到了一个关于有符号和无符号的警告
我试用了gcc
4.8.1和-Wsign compare
也不包括在-Wall
中
从合同通用条款
-Wsign比较
当有符号值转换为无符号值时,有符号值和无符号值之间的比较可能产生错误结果时发出警告。此警告也由-Wextra启用;要在没有此警告的情况下获取-Wextra的其他警告,请使用-Wextra-Wno符号比较
要启用的正确警告选项是
-Wsign compare
,默认情况下不包括该选项,也不包括在-Wall
中-Wsign compare
也由-Wextra
启用,因此可以使用-Wsign compare
或-Wextra
。作为参考,C不需要任何诊断来比较有符号操作数和无符号操作数
我记得当我在GCC lower中使用这段代码时,我得到了一个关于有符号和无符号的警告
我试用了gcc
4.8.1和-Wsign compare
也不包括在-Wall
中
从合同通用条款
-Wsign比较
当有符号值转换为无符号值时,有符号值和无符号值之间的比较可能产生错误结果时发出警告。此警告也由-Wextra启用;要在没有此警告的情况下获取-Wextra的其他警告,请使用-Wextra-Wno符号比较
您是否尝试添加了
-Wall
和-Wextra
选项?首先,您应该使用size\u t
作为迭代变量,但您可能已经知道了这一点。但是,为什么编译器要在这里发出警告?很容易证明i
变量始终为正,除非存在溢出。在这里,编译器知道编译时的上限(10
),因此它永远不会溢出。谢谢@SouravGhosh。就这样。当我使用-Wextra选项时,会收到一条警告。那么为什么我不使用旧的GCC-Wextra它也会得到一个警告呢?I
可以静态地证明不会变为负值或溢出。。。我会考虑在这里发出不必要的警告。哪种版本的GCC产生了没有<代码>的警告——Wextra < /代码>?您是否尝试添加<代码>墙> /代码>和<代码> - Wextra < /代码>选项?首先,您应该使用<代码> SiZeSt<<代码>作为迭代变量,但您可能已经知道了。但是,为什么编译器要在这里发出警告?很容易证明i
变量始终为正,除非存在溢出。在这里,编译器知道编译时的上限(10
),因此它永远不会溢出。谢谢@SouravGhosh。就这样。当我使用-Wextra选项时,会收到一条警告。那么为什么我不使用旧的GCC-Wextra它也会得到一个警告呢?I
可以静态地证明不会变为负值或溢出。。。我会考虑在这里发出不必要的警告。哪种版本的GCC产生的警告没有<代码> - Wextra < /代码>?- Wextra与-WALL相同吗?不,它们是不同的并且影响不同类型的错误。您的特定错误由-Wextra
捕获。但是,我始终建议同时使用-Wextra
和-Wall
。是否-Wextra与-Wall相同?不,它们不同,影响不同类型的错误。您的特定错误由-Wextra
捕获。但是,我始终建议同时使用-Wextra
和-Wall
。