MISRA C:2004 チェックをオンにして IAR Workbench コンパイラを使用しています。
フラグメントは次のとおりです。
#define UNS_32 unsigned int
UNS_32 arg = 3U;
UNS_32 converted_arg = (UNS_32) arg;
/* Error line --> */ UNS_32 irq_source = (UNS_32)(1U << converted_arg);
MISRA エラーは次のとおりです。 エラー [Pm136]: 基礎となる MISRA 型 "unsigned char" から "unsigned int" への不正な明示的変換 (MISRA C 2004 ルール 10.3)
unsigned char
上記のコードには何も表示されません。
なぜミスラはここでエラーをスローしたのですか?での議論 左シフトとは異なる昇格規則を持つ可能性のある乗算について説明します。
私の理解では、コンパイラは式を小さいサイズに降格するのではなく、より大きなサイズのデータ型に昇格させる必要があります。
ここで実際に何が起こっているのですか?
コードを MISRA C:2004 に準拠させるにはどうすればよいですか?
編集1:
エラー行を次のように変更します。
UNS_32 irq_source = (UNS_32)((UNS_32) 1U << converted_arg);
エラーが消えません。