long から int への暗黙的な変換に時間がかかるたびに警告をスローするようにコンパイラ (私は gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-46) または icc 11.1 を使用しています) に指示する方法があるかどうか疑問に思っていました。場所。たとえば、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 は予期せず (私には) それを行いません。
ありがとう、
ミケーレ