我们如何使用if
或?
(三元运算符)编码条件行为而不使用?
想到一个想法:
for(;boolean_expression;) {
// our code
break;
}
还有其他人吗?
答案 0 :(得分:5)
我希望你不想要的只是'if'或'ternary'。
<强>#1 强>
这个怎么样:
而不是:if (condition) printf("Hi");
使用:
condition && printf("Hi");
短路评估。这与使用if
非常相似。
<强>#2 强>
if (condition) a(); else b();
使用:
int (*p[2])(void) = {b, a};
(p[!!condition])()
使用函数指针数组和双重否定。
<强>#3 强>
另一个接近三元运算符的变量(函数,但是)
ternary_fn(int cond, int trueVal, int falseVal){
int arr[2];
arr[!!cond] = falseVal;
arr[!cond] = trueVal;
return arr[0];
}
使用ret = ternary_fn(a>b, 5, 3)
代替ret = a > b ? 5 : 3;
答案 1 :(得分:2)
switch(condition){
case TRUE:
ourcode();
break;
default:
somethingelse();
}
答案 2 :(得分:1)
使用函数指针:
void ourcode(void){puts("Yes!");}
void somethingelse(void){puts("No!");}
void (*_if[])(void) = { somethingelse,ourcode };
int main(void){
_if[1==1]();
_if[1==0]();
return 0;
}
这依赖于真正的布尔表达式,评估为1,这对于gcc来说恰好是正确的,但我不认为它是由标准保证的。