11.1.6 MISRA2004チェック(ルール番号10.1)

以下の条件をすべて満たすファイルに含まれる,列挙型の変数,返値又は列挙子を用いた文に対して不要なメッセージを出力することがあります。

-

-signed_charオプションが指定されず,列挙子の値の範囲が0〜+255の範囲内にある列挙型の定義を含む
または
-signed_charオプションが指定され,列挙子の値の範囲が-128〜+255の範囲内にある列挙型の定義を含む

-

列挙型の変数,返値又は列挙子を用いた文を含む

-

MISRAのルール番号10.1をチェックするコンパイルオプションが指定される

 

typedef enum E { E1 = 0, E2, E3 } etype;
etype func( void );
etype evar;
etype func(void)
{
        evar = E1;                      // 10.1のメッセージが出力される
        return E1;                      // 10.1のメッセージが出力される
}

 

【回避策】

列挙子を列挙型でキャストしてください。

typedef enum E { E1 = 0, E2, E3 } etype;
etype func( void );
etype evar;
etype func(void)
{
        evar = (etype)E1;               // 列挙子を列挙型でキャストする
        return (etype)E1;               // 列挙子を列挙型でキャストする
}