標籤:misra 編程規範 c語言
常量
規則7.1(強制):不應使用用八進位(零除外)和八進位escape序列。
聲明與定義
規則8.1(強制):函數應當具有原型聲明,且原型在函數的定義和調用範圍內都是可見的。
規則8.2(強制):不論何時聲明或定義了一個對象或函數,它的類型都應顯式聲明。
規則8.3(強制):函數的每個參數類型在申明和定義中必須等同的,函數的傳回型別也該是等同的。
規則8.4(強制):如果對象或函數被聲明了多次,那麼它們的類型應該是相容的。
規則8.5(強制):標頭檔中不應有對象或函數的定義。
規則8.6(強制):函數應該聲明為具有檔案範圍。
規則8.7(強制):如果對象的訪問只是在單一的函數中,那麼對象應該在區塊範圍內聲明。
規則8.8(強制):外部對象或函數應該聲明在唯一的檔案中。
規則8.9(強制):具有外部連結的標識符應該具有準確的外部定義。
規則8.10(強制):在檔案範圍內聲明和定義的所有對象或函數具有內部連結,除非是在需要外部連結的情況下。
規則8.11(強制):static儲存類別識別項應該用於具有內部連結化物件和函數的定義和聲明。
規則8.12(強制):當一個數組聲明具有外部連結,它的大小應該顯式聲明或通過初始化進行隱式定義。
初始化
規則9.1(強制):所有自動變數在使用前都應該被賦初值。
The intent of this rule is that all variables shall have been written to before they are read. This does not neccessarily require initialisation at declaration.
Note that according to the ISO C statdard,variables with static storage duration are automatically initialised to zero by default ,unless explicitly initalised.In practise,many embedded enviroments tdo not implement this behaviours, Static storage duration is a property of all variables declared with the static storage class specifier,or with external linkage.Varigables with automatic storage duration are not usuallu automatically initialised.
規則9.2(強制):應該使用大括弧一指示和匹配數組和結構的非零初始化構造。
規則9.3(強制):在枚舉列表中,”=“不能顯式用於除首元素之外的元素上,除非所有的元素都是顯式初始化的。
數值轉換
規則10.1(強制):下列條件成立時,整型表達時的值不應隱式轉換為不同基本類型:
a) 轉換不是帶符號的向更寬整數類型的轉換,或者
b)運算式是複雜的運算式,或者
b)運算式不是常量而是函數參數,或者
d)表達是不常量而是返回的運算式
規則10.2(強制):下列條件成立時,浮點類型表達的值不應隱式轉換為不同的類型:
a)轉換不是向更寬浮點類型的轉換,或者
b)運算式是複雜運算式,或則
c)運算式是函數參數,或
d)運算式的返回運算式
規則10.3(強制):整型複雜運算式的值只能強制轉換到更窄的類型且與運算式的基本類型具有相同的符號
規則10.4(強制):浮點類型運算式的值智能強制轉換到更窄的浮點類型。
規則10.5(強制): 如果位元運算~和<<應用在基本類型為unsigned char 或unsigned short的運算元,結果應該立即強制轉換為運算元的基本類型。
規則10.6(強制):尾碼”U“應該用在unsigned 類型的常量上。
MISRA C編程規範(2)