在比较有符号和无符号的整数时,GCC linux 5.1不会发出警告

时间:2015-11-24 16:22:16

标签: 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;
    }

我使用的是GCC 5.1.1(Redhat)。 我记得当我在GCC中使用此代码时,我收到有关已签名和未签名的警告。那么为什么我在GCC 5.1.1中使用它时没有任何警告? 我希望有人可以帮我解释一下这个问题。非常感谢!

2 个答案:

答案 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。