0

私はこの定義を持っています:

static const char* STRING_ARRAY[NUM_UNITS] = STRING_ARRAY_VALUES;

いつ

#define STRING_ARRAY_VALUES                 \
{   "n/a",                                  \
  "bool",                                   \
  ...                                       \
}

残念ながら、MISRA-C++ルール8-5-2に準拠していません。

"MISRA-C++ Rule 8-5-2 (required): Braces shall be used to indicate and match the 
structure in the non-zero initialization of arrays and structures."

なぜ準拠していないのか説明してもらえますか?#defineコマンドは定義を次のようなものに変えると思いました:

static const char* STRING_ARRAY[NUM_UNITS] = {"n/a", "bool",...}

これはMISRAルールに準拠しています。

を維持しながら、これをMISRAに準拠させる方法はあり#defineますか?

4

1 に答える 1

2

考えられる原因は2つあります。

  • MISRAチェッカーが壊れています。LDRA Testbedを使用してコードをテストしましたが、エラーは発生しません。
  • または、NUM_UNITSが配列に渡されるポインターの数と一致しない可能性があると思います。これがMISRAルールの違反であるかどうかは私にはわかりません。sizeof(STRING_ARRAY)/sizeof(const char*)==という静的アサーションを追加できますNUM_UNITS。これは、MISRAに関係なく実行することをお勧めします。
于 2013-03-01T14:30:57.627 に答える