以下にコードを示します。
std::stringstream os;
os << std::hex; // MISRA warning on this line
os << std::setw(2);
os << std::setfill('0');
警告: 「必須の規則 8-4-4、'&' または括弧で囲まれたパラメーター リストなしで使用される関数識別子」
これを解決できません。解決策を提案してください。
できるよ
std::hex(std::cout);
これはと同等です
std::cout << std::hex;
これは警告を取り除きます。または、使用します
std::cout << &std::hex;
しかし、これは正しいですが、本当に醜いように見えます。
要するに、MISRA はここで「間違っている」/ぎこちない/予期しないことです。std::hex
今まで通り問題なく使えます。
実際には次の 3 つのオプションがあります。
std::hex
cout<<&std::hex
最初のオプションは実用的でない可能性があり、2 番目のオプションは厄介です。
幸いなことに、MISRA 標準では、MISRA C 標準 (これは私が手に入れるテキストを持っている唯一のものです) から、規則が奴隷的に守られないことを期待しています。
すべての規則を厳密に順守することはまずありません。実際には、個々の状況に関連する逸脱は許容されます。
もちろん、これはあなたがやりたいことができるという意味ではありません。代わりに、標準では、逸脱要求が提出されることを期待しています。これがどのように行われるかはローカルの問題であり、QMS がそれをカバーする必要があります。ツールに関しては、発生ごとに無視するオプションがある場合があります。
まず第一に、あなたが示したコードは私には非常に標準的に見えます。
それに応じて警告に対処するいくつかの可能な説明と方法が表示されます。
ストリーム マニピュレータstd::hex
は、MISRA 準拠で実装されています。
a) を使用しないでくださいstd::hex
。
b) 修正しstd::hex
ます。std::hex
あなたの環境での実装を調べてみてください。
std::hex を含むコードは準拠していますが、警告は誤りです。
a) 警告を無視または抑制します。
b) コンパイラまたはコード バリデータのサプライヤにバグ レポートを提出します。