在什么情况下会执行以下代码的“False”部分?
x = 20;
y = -30;
if (x > y) {
// True part
}
else {
// False part
}
注意:语言是C,编译器是gcc(虽然其他一些编译器也可能做同样的事情)。
答案 0 :(得分:6)
如果y
是无符号整数类型,它将被初始化为某个非常大的值(因为表示负整数值的方式),并且比较表达式将计算为false
。
答案 1 :(得分:2)
unsigned int x = 20;
unsigned int y = -30;
可悲的是,我正在使用的编译器甚至没有给出关于此的编译时警告。
答案 2 :(得分:2)
仅当X和Y无符号时。
答案 3 :(得分:2)
即使x
和y
为int
,您仍然可以拥有以下内容......
#define if(p) if(!(p))
...在你方法的主体中;)
答案 4 :(得分:1)
抱歉,这是C ++。无论如何,这很有趣,所以除非有人抱怨,否则我不会删除。
static_cast
需要一些帮助,但static_cast
是安全的,对吗?
enum E { ea = 20, eb = -30 } x;
enum F { fa = 20, fb = -30 } y;
bool operator>( E const &l, F const &r )
{ return static_cast<int>(l) < static_cast<int>(r); }
x = static_cast<E>( 20 );
y = static_cast<F>( -30 );
或稍微宽松一点,
enum E { x = 20 };
enum F { y = -30 };
bool operator>( E, F )
{ return false; }