C:警告隐式long to int转换

时间:2009-11-18 23:12:52

标签: c compiler-construction gcc-warning

我想知道是否有办法告诉编译器(我在gcc版本4.1.2 20080704(Red Hat 4.1.2-46)或icc 11.1)每当一个长到int时都会发出警告隐式转换发生。例如,编译包含代码的文件test.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
    int n = atol(argv[1]);
    printf("int: %d\n", n);
    long int N = atol(argv[1]);
    printf("long: %ld\n", N);

    return 0;
}

使用:

gcc -Wall -Wconversion test.c -o test

不会产生任何警告。将生成的二进制文件作为

运行
./test 12345678901

我得到了,正如所料:

int: -539222987
long: 12345678901

因为数字12345678901溢出了int而不是long。 我希望编译器告诉我什么时候会发生这样的事情。意外的-Wconversion选项(对我而言)不会这样做。

谢谢,

米歇尔

3 个答案:

答案 0 :(得分:4)

检查您的gcc版本是否有-Wshorten-64-to-32。为大量可能是虚假的双重做准备 - &gt;如果在代码中使用浮点,则浮点转换警告。

编辑:我认为shorten-64-to-32可能是主要内容永远不会发现的Apple扩展程序。所以除非你升级到gcc-4.3或更高版本,否则你可能会失败。

答案 1 :(得分:3)

答案 2 :(得分:0)

-Wconversion changed with GCC4.3的行为 - 更新您的编译器并重试(无法检查它是否真的有效,因为我在32位系统上,但是正确地发出了警告atoll,它应该)......