如何让gcc抱怨char与256

时间:2015-07-22 18:10:29

标签: c gcc gcc-warning

我在codegolf.stackexchange上找到以下代码来打印ASCII字符的代码表:

#include <stdio.h>

int main(){
    char i;
    for(i = 0; i < 256; i++){
        printf("%3d 0x%2x: %c\n", i, i, i);
    }
    return 0;
}

由于char在其中存储单个字节,因此它们总是< 256并且循环永远不会终止。我想在编译时发现这一点。

很好,clang发出以下警告:

a.c:5:18: warning: comparison of constant 256 with expression of type 'char' is always true [-Wtautological-constant-out-of-range-compare]
for(i = 0; i < 256; i++){
           ~ ^ ~~~

但是,gccgcc -Wall都不会发出任何警告。是否有任何一组命令行选项可以打开这种警告?或者在gcc中是不可能的?

3 个答案:

答案 0 :(得分:7)

-Wtype-limits(或-Wextra)应触发此警告

答案 1 :(得分:1)

添加-Wextra-Wconversion。第一个包含对实际探测的警告,但后者会警告许多其他相关问题。

但要注意:如果您的代码编写得不好(签名/未签名等),-Wconversion也会警告许多其他潜在问题。最好是编译,查看警告并仔细验证列出的行,可能添加强制转换(如果代码正确则考虑三次!)。

答案 2 :(得分:0)

我使用gcc在ubuntu 14.04 linux上用gcc编译了发布的代码:

-Wall -Wextra -pedantic -std=c99

并且编译器输出此警告:

warning: comparison is always true due to limited range of data type [-Wtype-limits]

在编译时总是启用所有警告的另一个原因