MISRA?

Tags: ,

控制語句體沒有使用括號封閉 ;

'if'­'else'­'if' 結構後面沒有'else' ;

函式的返回值沒有被使用 。

工具/原料

Rule 15.6 2212 15.7 2004 17.7 3200

MISRA C:2012

Rule 15.6 2212

2212 Body of control statement is not enclosed within braces.

這個 'if'、'for'、'while'、'do while'語句的塊體不是一個 複合語句 ,例如,它沒有使用大括號來封閉。

雖然使用這種方式寫程式碼是完全合法的,但是這樣可能會存在一些潛在的危險。 沒有括號的情況下,控制語句的塊體就僅僅只能是單個語句了;但是,這樣會使得後面的程式碼很容易被誤解。

下面的例子可以看出不好的佈局如何讓人產生危險的錯覺:'++y' 語句似乎是在 'if' 語句的控制範圍內,實際上它並不是。

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

程式設計規範修改舉例

NO

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

Rule 15.7 2004

2004 No concluding 'else' exists in this 'if'-'else'-'if' statement.

'if' ... 'else if' 結構後面沒有'else'。 在許多編碼標準中都不建議這樣做。'else'對於邏輯完整性是很重要的。

注意:當一個 'if' 語句後面沒有跟隨一個 'else' 時, 不會生成訊息2004,除非 這個 'if' 關鍵字前面直接有一個'else' (即 'else if' 語句)。

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

程式設計規範修改舉例

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

Rule 17.7 3200

3200 '%s' returns a value which is not being used.

函式宣告的返回型別為"non-void",但是函式呼叫後的返回值沒有用於賦值或檢查。

如果一個函式返回了一個值,那麼通常會以某種方式使用這個返回值。 如果確實打算忽略這個返回值,那麼通常把它強制轉換成'void'型別。如果這麼做的話就不會生成訊息3200。

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

程式設計規範修改舉例

MISRA C Rule 15.6 2212 15.7 2004 17.7 3200

,
相關問題答案