バックグラウンド
前回、括弧が暗黙のキャスト ( here ) を引き起こしているかどうかについて尋ねたとき、@pmg は「C では int の下では何も行われていない」と指摘してくれました。気を散らすだけです。
序章
以下、カッコがポイントです。または、もっと退屈ですが正確に言うと、私が目にする唯一の演算子は括弧と代入演算子です。
C の括弧 operator に関するこのリファレンスでは、括弧が型を変更することについては何も見ていません (型キャスト構文以外では、このケースではありません)。
一方、ここに代入の自動型変換があることを思い出させるリファレンスがありますが、ここで説明する静的解析ツールの動作を説明するものではないと思います。
以前の質問と同様に、「OK」は静的解析ツールが暗黙の型変換について警告しなかったことを意味し、「NOT OK」は警告したことを意味します。
int main(void)
{
unsigned int ui;
int i;
ui = (256U); // NOT OK (*) (1)
i = (256U); // NOT OK (*) (2)
i = 256; // OK
i = 256U; // NOT OK
ui = 256U; // OK (3)
ui = 256; // NOT OK
return(0);
}
最初の 2 つを除いてすべて理解できます - 括弧は何をしますか? それらが暗黙的な型キャストの方法で何もしない場合、(1) は OK であり、(2) は OK ではないことが期待されます。int よりも小さい型から int までの型の自動型昇格を行う場合、(1) は OK ではなく、(2) は OK であると予想されます。しかし、このツールは、どちらもOKではないと言っています。
これは静的解析ツールのエラーですか、それともツールは正しく、C での暗黙的な型変換について他に学ぶ必要があることはありますか?
(ところで、値 256 が十分に小さく、マシンでオーバーフローが発生しないことを願っています...)