このコードを g++ -Wall でコンパイルしましたが、警告/エラーは発生しません。
#include "stdio.h"
int main() {
long x = 1000000000000;
int y = x;
printf("%ld %d\n", x, y);
return 0;
}
出力は期待されるものです:
1000000000000 -727379968
しかし、この場合、コンパイラーは暗黙の変換/切り捨てを防ぐべきではありませんか?
g++ (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)