3
A
回答
1
在算術運算中使用時,小於int
的積分類型轉換爲int
或unsigned
(請參見C11 6.3.1.8常規算術轉換)。這就是爲什麼你看到演員(int)
爲x
和y
。請注意,默認情況下,-rte
不會對downcast發出警告,因爲它們不是未定義的行爲(6.3.1.3§3表示已簽名的downcast是實現定義的,並且實現可能會引發信號)。如果添加的選項-warn-signed-downcast
,你會看到你很可能尋找的斷言,這是由於投進去結果(char)
:
/*@ assert rte: signed_downcast: (int)x+(int)y ≤ 127; */
/*@ assert rte: signed_downcast: -128 ≤ (int)x+(int)y; */
請注意,如果你把結果存儲到一個int,作爲在
void main(void) {
char x;
char y;
int z;
x = 1;
y = 127;
z = x + y;
return;
}
不會有任何下降警告(但會出現簽名溢出警告)。
相關問題
- 1. 檢查C++下溢/溢出?
- 2. 檢查溢出
- 3. С++:「無效比較」斷言
- 4. strtoXX:檢查溢出
- 5. MIPS溢出檢查
- 6. C# - 方法無效檢查
- 7. 整數運算無溢出檢查
- 8. 切斷效果與溢出:隱藏
- 9. 無效如果在C語言輸出
- 10. CUNIT斷言斷言`((無效*)0)= f_pCurSuite」失敗
- 11. 檢查語言效度
- 12. 檢查WrapPanel是否溢出?
- 13. 轉到:bytes.Repeat檢查溢出
- 14. boost :: multiprecision :: cpp_dec_float_50溢出檢查
- 15. 溢出檢查不工作
- 16. 數組不溢出(C語言)
- 17. 溢出語言C中的短整數
- 18. [亞馬遜](500310)操作無效:斷言
- 19. 斷言無效異步方法
- 20. 無效靜態斷言行爲
- 21. C++:溢出隱不斷轉換[-Woverflow]
- 22. 郵資-C做出錯誤
- 23. 郵資-C/WP無法在
- 24. Frama-C被證明是無效的斷言
- 25. C++ preconditions /斷言
- 26. C嘗試檢查無效輸入
- 27. JavaScript斷言庫 - 柴與檢查類型
- 28. MINITEST斷言失敗的檢查
- 29. 檢查斷言是否已啓用
- 30. 處理錯誤檢查與斷言