2009-11-09 5 views
0

Je suis juste pour comprendre ce que fait cette méthode, je sais qu'il doit y avoir un moyen de mettre cette ligne par ligne, pouvez-vous m'aider s'il vous plaît?C retour et comparaison en ligne

Merci

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

MISE À JOUR: Voici le code 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

Aurait besoin du code de la fonction evaluateExpression. –

+0

Il suffit de mettre le code Blaenk – Sheldon

Répondre

5

La "expression ternaire" utilisée dans cette longue déclaration return a un effet net comme une instruction if/else, comme comme suit:

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

Merci beaucoup! – Sheldon

+0

si ... (?) Alors ... else (:) ... – stefanB

+0

Mais, evaluateExpression n'est pas une fonction booléenne, c'est une fonction entière. Comment cela fonctionne-t-il dans ce scénario? – Sheldon

1

Il faut un tableau de trois EXPRESSION s et évalue le premier. Si le premier évalue à une valeur vraie, il évalue la deuxième expression et renvoie sa valeur. Sinon, il évalue la troisième expression et renvoie sa valeur.