我想知道是否有办法告诉编译器(我在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选项(对我而言)不会这样做。
谢谢,
米歇尔
答案 0 :(得分:4)
检查您的gcc版本是否有-Wshorten-64-to-32
。为大量可能是虚假的双重做准备 - &gt;如果在代码中使用浮点,则浮点转换警告。
编辑:我认为shorten-64-to-32
可能是主要内容永远不会发现的Apple扩展程序。所以除非你升级到gcc-4.3或更高版本,否则你可能会失败。
答案 1 :(得分:3)
试试gcc 4.3.0
答案 2 :(得分:0)
-Wconversion
changed with GCC4.3的行为 - 更新您的编译器并重试(无法检查它是否真的有效,因为我在32位系统上,但是正确地发出了警告atoll
,它应该)......