私は次のCコードを持っています:
unsigned int a;
unsigned char b, c;
void test(void) {
if (a < b)
return;
if (a < (b ? b : c))
return;
}
(Microsoftcl
を使用して、MS SDK 7の-W3
警告レベルから)コンパイルすると、2番目の比較で警告が表示されます:C4018、符号付き/符号なしの不一致。最初の比較では警告は出されません。
条件演算子に関するMSのドキュメントを確認しましたが、両方のオペランドが同じタイプの場合、結果は同じタイプになるため、最初の比較として機能するはずです。私は何かが足りないのですか?
UPD:でテストされ、gcc -Wall -Wextra -pedantic
警告はまったく表示されませんでした。