【发布时间】:2012-10-02 00:05:26
【问题描述】:
我有以下 C 代码:
unsigned int a;
unsigned char b, c;
void test(void) {
if (a < b)
return;
if (a < (b ? b : c))
return;
}
当我编译它时(使用 Microsoft cl,来自 MS SDK 7,-W3 警告级别),第二个比较发出警告:C4018,有符号/无符号不匹配。第一次比较不会发出警告。
我检查了MS docs on the conditional operator,他们说如果两个操作数属于同一类型,则结果将属于同一类型,所以它应该作为第一个比较。我错过了什么吗?
UPD: 用gcc -Wall -Wextra -pedantic 测试,没有收到任何警告。
【问题讨论】:
-
您的编译器选项中是否打开了所有编译器警告?
-
是的,一个不方便的错误/功能。如果 VC 抱怨,我会仔细研究它并进行投射,并且不要再想它了。
-
@cowboydan 是的,
-W3。如果我没有指定警告级别,则根本没有警告。 -
gcc 不会产生任何警告。
标签: c visual-c++ conditional-operator