我有以下代碼:奇怪的警告行爲和符號/無符號比較
unsigned int a;
if (a > numeric_limits<int>::max())
do_stuff();
編譯時,GCC抱怨
警告: 「比較之間簽署和未簽署」
好的,我明白了
但是,用下面的代碼:
unsigned int a;
if (a > (numeric_limits<int>::max()))
do_stuff();
警告不再顯示,我真的不知道爲什麼...... 是否有這樣的行爲有任何合乎邏輯的理由還是我做錯了什麼?
試過[模擬這種行爲(HTTP:// WWW。 ideone.com/5NZL9)。但它顯示警告。 – iammilind
周圍的代碼是什麼? – quasiverse
do_stuff()部分只包含拋出異常。沒有周圍的代碼,因爲這是函數中的唯一行。但是,該功能用於大型項目。我嘗試了iammilind提供的代碼,但沒有出現警告。這裏是我用來編譯程序的gcc選項'-Wall -ansi -pedantic -Wno-long-long' – malamioute