1

以下は本MISRA C:2012からの抜粋ですが、私には理解できません

複合式 (+ ,- ,* ,/ ,&, |, ^, <<, >>, ?:) の値は、より広い型のオブジェクトに割り当てられません。

例:

u32a = u16a + u16b;     //non - compliant to MISRA C guidelines

u16 は uint16_t で、u32 は uint32_t です。

これにより、プログラムの実行中に問題が発生しますか? この場合、u16a が整数オーバーフローを引き起こす可能性があるため、u32a を使用する必要があるかもしれません。

4

1 に答える 1

3

これは、コンパイラが (u16a + u16b) 式をどのように処理するかがわからないためです。これは、結果をターゲット変数に割り当てる前に、結果を 16 ビットにも格納することを検討する可能性があるためです (埋め込みで使用される 8 ビットと 16 ビットのターゲットを考慮してください)。システム)。

絶対に可能ですが、オーバーフローが発生しないと(間違って)期待しています。MISRA で推奨されているように代入を記述するだけで、このオーバーフローの問題が明確になります。

于 2013-10-22T11:25:10.130 に答える