2009-11-09 2 views
0

Я просто выясню, что делает этот метод, я знаю, что должен быть способ поставить это по строчке, вы можете мне помочь?C возвращение и сравнение inline

Благодаря

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

Нужен код для функции valuExpression. –

+0

Просто введите код Blaenk – Sheldon

ответ

5

«тройная выражение» используется в том, что долгое return заявление имеет чистый эффект так же, как если/другое заявление, такое в том числе:

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

Спасибо большое! – Sheldon

+0

if ... (?) Then ... else (:) ... – stefanB

+0

Но, expressionExpression не является логической функцией, является целочисленной функцией. Как это работает в этом сценарии? – Sheldon

1

Требуется массив из трех EXPRESSION s и оценивает первый. Если первый оценивает истинное значение, он вычисляет второе выражение и возвращает его значение. В противном случае он оценивает третье выражение и возвращает его значение.

Смежные вопросы