模拟条件

时间:2011-04-01 06:18:39

标签: c conditional conditional-statements

我们如何使用if?(三元运算符)编码条件行为而不使用

想到一个想法:

for(;boolean_expression;) {
  // our code
  break;
}

还有其他人吗?

3 个答案:

答案 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来说恰好是正确的,但我不认为它是由标准保证的。