次のコードは、なぜ MSVC が符号付き (int) と符号付き (int) と符号なし整数の等価比較に対して警告を発行しないのかという疑問を引き起こします。符号なし (符号なし int) 整数値:
int a = INT_MAX; unsigned int b = UINT_MAX; bool c = false; if(a == b) // no warning expected here c = true;
C 標準に従って、符号付き整数と符号なし整数を比較する場合、符号付きの値は符号なしに変換されます。 (-1 == -1) および ((unsigned)-1 == -1) が true であるため、この変換では等価比較の値が保持されます。ただし、大なり (>) や小なり ( 2U) は true と評価されます。
MSVC 開発者は、次のさまざまな演算子の警告レベルに関して特定の選択を行っています。
このアプローチにより、次の警告が確実に生成されます。期待される結果を維持する等価比較に対する不必要な警告を回避しながら、変換によって予期しない動作が発生する可能性があるシナリオ。
以上がMSVC が符号付き/符号なし整数の等価比較について警告しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。