4

以下にコードを示します。

  std::stringstream os;

  os << std::hex; // MISRA warning on this line
  os << std::setw(2);
  os << std::setfill('0');

警告: 「必須の規則 8-4-4、'&' または括弧で囲まれたパラメーター リストなしで使用される関数識別子」

これを解決できません。解決策を提案してください。

4

7 に答える 7

3

できるよ

std::hex(std::cout);

これはと同等です

std::cout << std::hex;

これは警告を取り除きます。または、使用します

std::cout << &std::hex;

しかし、これは正しいですが、本当に醜いように見えます。

要するに、MISRA はここで「間違っている」/ぎこちない/予期しないことです。std::hex今まで通り問題なく使えます。

于 2014-01-30T08:36:26.817 に答える
0

実際には次の 3 つのオプションがあります。

  1. 使用禁止std::hex
  2. 行うcout<<&std::hex
  3. MISRA規格からの逸脱要求を提起する

最初のオプションは実用的でない可能性があり、2 番目のオプションは厄介です。

幸いなことに、MISRA 標準では、MISRA C 標準 (これは私が手に入れるテキストを持っている唯一のものです) から、規則が奴隷的に守られないことを期待しています。

すべての規則を厳密に順守することはまずありません。実際には、個々の状況に関連する逸脱は許容されます。

もちろん、これはあなたがやりたいことができるという意味ではありません。代わりに、標準では、逸脱要求が提出されることを期待しています。これがどのように行われるかはローカルの問題であり、QMS がそれをカバーする必要があります。ツールに関しては、発生ごとに無視するオプションがある場合があります。

于 2014-03-21T13:42:16.670 に答える
0

まず第一に、あなたが示したコードは私には非常に標準的に見えます。

それに応じて警告に対処するいくつかの可能な説明と方法が表示されます。

  1. ストリーム マニピュレータstd::hexは、MISRA 準拠で実装されています。

    a) を使用しないでくださいstd::hex

    b) 修正しstd::hexます。std::hexあなたの環境での実装を調べてみてください。

  2. std::hex を含むコードは準拠していますが、警告は誤りです。

    a) 警告を無視または抑制します。

    b) コンパイラまたはコード バリデータのサプライヤにバグ レポートを提出します。

于 2014-01-30T08:17:57.513 に答える