Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC linux 5.1在比较有符号和无符号整数时不会发出警告_C_Linux_Gcc - Fatal编程技术网

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