簡體   English   中英

MISRA C 2012:規則 10.5

[英]MISRA C 2012: Rule-10.5

QA-C 規則 4303 聲明“本質上布爾”類型的表達式被強制轉換為有符號類型。 我想了解如果我們基本上將 boolean 類型轉換為帶符號的類型,可能會出現什么實際問題? 在 C90 中,因為沒有 boolean 數據類型 typedef 被使用,它們基本上被歸類為 boolean。 請有人用例子解釋真正的問題

使用奇怪的類型組合可能表明存在無意的錯誤。 有了適當的規則,static 分析器就可以捕獲此類錯誤。

例如,假設我們想做一些按位算術。 我們在無符號類型上執行此操作以使我們免於許多有符號類型問題,然后將結果分配給有符號類型:

int32_t result = (int32_t)(1u << n);

這段代碼很好、很合理,而且乍一看也符合 MISRA。 然而,由於程序員傾向於用咖啡給他們的新鍵盤洗禮,他們會得到粘滯鍵,因此可能會輸入以下內容:

int32_t result = (int32_t)(1u < n); 

這是無意義的代碼,但完全有效的 C,因此編譯器可能對這個錯誤保持沉默。 例如,帶有最大警告的 gcc 很高興跳過它 - 甚至-Wconversion沒有幫助。

但是由於(1u < n)是“本質上是布爾值”並且 10.5 不允許將此類表達式轉換為任何其他類型,因此您的 static 分析器應該會發現該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM