2009-11-09 3 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 함수의 코드가 필요합니다. –

+0

코드 넣기 Blaenk – Sheldon

답변

5

그렇게 오래 return 문에 사용 된 "삼원 식"단지의 경우/else 문 등을 같은 그물 효과가 있습니다 다음과 같이 :

+0

대단히 감사합니다! – Sheldon

+0

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

+0

하지만 evaluateExpression은 부울 함수가 아니며 정수 함수입니다. 이 시나리오에서는 어떻게 작동합니까? – Sheldon

1

3 개의 배열을 취한다. EXPRESSION 첫 번째 것을 평가합니다. 첫 번째 값이 참값으로 평가되면 두 번째 식을 계산하고 그 값을 반환합니다. 그렇지 않으면 세 번째 표현식을 평가하고 그 값을 반환합니다.