我想知道是否有办法告诉编译器(我在 gcc 版本 4.1.2 20080704(Red Hat 4.1.2-46)或 icc 11.1 上)在 long-to-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 出人意料地(对我来说)不会这样做。
谢谢,
米歇尔