2011-04-01 35 views
4

如何使用if?(三元運算符)編碼條件行爲而不使用模擬條件

一個想法浮現在腦海:

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

任何其他方面?

+1

與'while'一樣嗎? – 2011-04-01 06:20:59

+4

你爲什麼想這樣做? – jeffythedragonslayer 2011-04-01 07:14:53

+0

@da密碼猴 - A:好奇心 – 2011-04-01 07:29:37

回答

5

我希望你不想要的只是'如果'或'三元'。

#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;

+0

你能解釋雙重否定技巧嗎? – Halst 2011-04-01 09:23:05

+2

它確保該值始終爲0或1,否則可以將任何正值傳遞爲真。 – ChrisWue 2011-04-01 10:14:22

2
switch(condition){ 
    case TRUE: 
    ourcode(); 
    break; 
    default: 
    somethingelse(); 
} 
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來說是正確的,但我認爲它不被標準保證。

+2

邏輯運算符('==','!=','!','>','<', '> =','<=','&&'和'|| ')可以是0或1. – caf 2011-04-01 06:54:32

+0

您可以給出一些更好的名稱而不是'_if'。 – SuperSaiyan 2011-04-01 07:05:05

+0

它比p []()更好:-) – regularfry 2011-04-01 08:38:05