【发布时间】:2015-06-19 23:00:41
【问题描述】:
#include <stdio.h>
int main()
{
unsigned int x=1;
char y=-1;
if (x>y)
{
printf("x>y");
}
else if(x==y)
printf("x=y");
else
printf("x<y");
return 0;
}
我在上面运行代码的时候,会执行最后一个else的printf,这真的很尴尬,因为x是1,y是-1。
我认为比较“x>y”与分层提升有一些关系,因为当我将 x 的类型更改为“int”而不是“unsigned int”时,它确实是正确的。 这个问题真的很有趣..欢迎任何答案/思考/建议。
【问题讨论】:
-
编译该程序时你会收到警告......注意警告
-
提示:您如何将
-1解释为 unsigned 值? -
抱歉,在 Xcode 和 Ubuntu 的 gcc 中,它没有收到任何警告信息。您到底在说什么警告信息?
-
不,这是未定义的行为。
-
试试
-Wconversion(gcc)
标签: c