1
考慮下面的代碼片段:叮噹中是否存在「積分常量溢出」警告?
short x = 2000000000;
short x = (short)2000000000;
int x = 1000000000 * 1000000000;
我們可以得到一個警告(/錯誤),這些在鐺?怎麼樣?從哪個版本開始?
謝謝, Ciprian。
考慮下面的代碼片段:叮噹中是否存在「積分常量溢出」警告?
short x = 2000000000;
short x = (short)2000000000;
int x = 1000000000 * 1000000000;
我們可以得到一個警告(/錯誤),這些在鐺?怎麼樣?從哪個版本開始?
謝謝, Ciprian。
由於鐺3.3,至少,你在這兩種情況下的警告,甚至沒有嘗試的:
/* main.c */
short x = 2000000000;
int y = 1000000000 * 1000000000;
int main()
{
return 0;
}
編譯:
$ clang -c main.c
main.c:1:11: warning: implicit conversion from 'int' to 'short' changes value
from 2000000000 to -27648 [-Wconstant-conversion]
short x = 2000000000;
~ ^~~~~~~~~~
main.c:2:20: warning: overflow in expression; result is -1486618624 with type
'int' [-Winteger-overflow]
int y = 1000000000 * 1000000000;
^
2 warnings generated.
謝謝,這是一個很好的答案。您能否添加您使用的警告標誌?你也可以添加什麼時候發生什麼,當你做一個明確的演員,如短x =(短)2000000000; ?我將編輯我的問題以包含該案例。謝謝! – MciprianM
'$ clang -c main.c'是編譯命令。沒有警告標誌。 '(短)2000000000'將不會引發隱式轉換警告,因爲轉換是明確的:投射意味着「只要做」。 –