私はC++プロジェクトのソースコードの一部を静的に解析するためにCoverityを使用しています。私はこれがちょっと不思議な問題のように思えるかもしれませんが、Coverityがこのような問題を抱えている場合、このエラーが報告された根本的な理由を知りたいと思いました。それはエラーのフラグを保持して、私はこのエラーが実際には私のコーディングプラクティスを変更するものか、それとも本当に不必要なのかを知りたい。Coverity静的解析符号なし整数はChar(C++)
エラーそのフラグの例は次のとおり
unsigned int a;
a = 5;
コベリティは、これで問題があると言う:
「CID 101436(#1の1):暗黙的な整数変換(MISRA_CAST) MISRA-2004規則10.1違反:暗黙的に式の符号量を変更します。基底型char(8ビット、符号付き)を使用して5を符号なしで符号なし整数(32ビット、符号なし)に変換します。
上記の例では、5が符号なしのintであり、charではないことを現代のコンパイラは知っていませんか?これは本当に有効なエラーですか、コンパイル時にエラーが発生する可能性がありますか? エラーはできるだけ早く私が追加すると消えます。
unsigned int a;
a = 5U;
私はすべてのunsigned int型の後に「U」を指定しない場合、それは本当に問題ですか?
いいえ、これは明らかに問題ではありません。なぜあなたはMISRAに従うのですか? –
エラーは間違いありません。 '5'は最小の整数リテラルであるのでintであるのは間違ったイオンです。 'char'が保持できる有効範囲内にあることが知られているので、 'char'を問題なしに初期化するために' 5'を使うことは可能ですが、それは正しいです。 – NathanOliver
署名付きタイプに関する警告を表示しない場合は、「U」を追加するか、Coverityのチェッカーを変更します(チェッカーを無効にする)。 –