1

私の CCS 6.1 ARM コンパイラ (LM3Sxxxx Stellaris 用) は警告をスローします:

「MISRA ルール 12.2。式の値は、標準が許可する評価の順序にかかわらず同じでなければならない」

次のコードの場合:

typedef struct {
  ...
  uint32_t bufferCnt;
  uint8_t buffer[100];
  ...
} DIAG_INTERFACE_T;

static DIAG_INTERFACE_T diagInterfaces[1];

...
DIAG_INTERFACE_T * diag = &diagInterfaces[0];
uint8_t data = 0;
diag->bufferCnt = 0;
diag->buffer[diag->bufferCnt++] = data; // line where warning is issued
...

コードに問題はありません。誤検知ですか、それとも私のバグですか?

4

2 に答える 2

4

diag->bufferCnt++別のステートメントを入れて(OPコメントでハンスからもアドバイスされているため)警告は表示されません。

しかし、MISRA ルール 12.2 に関しては、プログラムに 12.2 の違反は見られません (ステートメントに単一のシーケンス ポイントがあり、未指定の動作はありません)。MISRA ソフトウェアのバグだと思います。

情報については、MISRA に次のようなアドバイザリ 12.13 ルールもあります。

(MISRA-C:2004, 12.13) 「インクリメント (++) およびデクリメント (--) 演算子は、式の中で他の演算子と混在させてはなりません」

MISRA の問題は、用語の使用が 12.3 では完璧とはほど遠いことです。一方、またはは->C=演算子であり、説明では算術演算子についてのみ話しているように見えます...

于 2015-09-13T22:01:20.503 に答える