我編譯此代碼使用g ++ -Wall,沒有得到警告/錯誤:G ++允許隱長到INT截斷在x64
#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)
*防止*它?怎麼樣*警告你呢? (你確實打開了警告,對嗎?它說你有,但沒有發出警報,甚至沒有「潛在的數據丟失」類型的警告?) – WhozCraig
這是正確的。我嘗試使用-WConversion我剛剛在這裏找到:http://stackoverflow.com/questions/5263267/why-does-c-allows-implicit-conversion-from-int-to- unsigned-int,但代碼仍然靜默編譯。 – AlphaStream
奇怪。現在我必須在我的叮噹中試試這個。你的海灣合作委員會比泥土更古老,但我有些收回這樣的東西沒有被捕獲。編輯:叮噹立即抓住「隱式轉換失去整數精度」。只是fyi。 – WhozCraig