2009-11-09 24 views
0

我只是想弄清楚這種方法做什麼,我知道必須有一種方法來逐行放置這條線,你能幫助我嗎?C返回和比較內嵌

感謝

int 
conditional (int n, EXPRESSION * * o) 
{ 
    return (evaluateExpression(*o++)? evaluateExpression(*o) : evaluateExpression(*++o)); 
} 

UPDATE:這是evaluateExpression代碼

int 
evaluateExpresion (EXPRESSION * e) 
{ 
__asm 
{ 
mov eax,dword ptr [e] 
movsx ecx,byte ptr [eax] 
test ecx,ecx 
jne salto1 
mov eax,dword ptr [e] 
mov eax,dword ptr [eax+4] 
jmp final 
salto1: 
mov esi,esp 
mov eax,dword ptr [e] 
mov ecx,dword ptr [eax+8] 
push ecx 
mov edx,dword ptr [e] 
movsx eax,byte ptr [edx] 
push eax 
mov ecx,dword ptr [e] 
mov edx,dword ptr [ecx+4] 
call edx 
add esp,8 
final: 
} 
} 
+0

需要evaluateExpression函數的代碼。 – 2009-11-09 00:43:34

+0

只需將代碼Blaenk – Sheldon 2009-11-09 00:55:08

回答

5

在長return語句中使用的 「三元表達式」 有一樣的if/else語句,這樣的淨效應如下所示:

if (evaluateExpression(*o++)) { 
    return evaluateExpression(*o); 
} else { 
    return evaluateExpression(*++o); 
} 
+0

非常感謝! – Sheldon 2009-11-09 00:50:56

+0

if ...(?)then ... else(:) ... – stefanB 2009-11-09 00:51:27

+0

但是,evaluateExpression不是一個布爾函數,是一個整數函數。這在這種情況下如何工作? – Sheldon 2009-11-09 00:52:50

1

它需要三個數組EXPRESSION s並評估第一個。如果第一個評估爲真值,則評估第二個表達式並返回其值。否則,它會評估第三個表達式並返回其值。