0
所以,在上游來源,我們有此線警告爲鐺的換檔裸整數值默認爲32位
rc_c_max = allmem - (3 << 30);
上游其通常使用GCC,做事「如預期」。 allmem
是uint64_t。 但與鐺,它似乎假設「3」是32位(或可能簽名),並且結果不是「按預期」。一個簡單的解決辦法是將其更改爲
rc_c_max = allmem - (3ULL << 30);
並且一切正常。通過計算/猜測哪些需要糾正的方法來改變所有裸露的整數變化是很乏味的,有沒有一個警告我可以讓clang指出這一點?-Wall -Wextra
不抱怨這一行。
輸出:
1/19/16 9:25:30.000 AM kernel[0]: allmem - (3 << 30) : 0x373333000 : 14817636352
1/19/16 9:25:30.000 AM kernel[0]: allmem - (3ULL << 30) : 0x273333000 : 10522669056
'3'的類型爲'signed int'。在編寫包含班次的代碼時,您應該始終考慮類型。 –