0
#include <stdio.h> 
#define abs(x) x > 0 ? x : -x 

int main(void) { 
    printf("%d\n", abs(abs(3 - 5))); 
    return 0; 
} 

왜 아래의 프로그램이 2를 출력하는 동안 위의 프로그램은 8을 출력하고 2가 아닌가?왜이 프로그램은 8을 출력합니까?

#include <stdio.h> 

int abs(int x) { 
    return x > 0 ? x : -x; 
} 

int main(void) { 
    printf("%d\n", abs(abs(3 - 5))); 
    return 0; 
} 
+2

변경'#define abs (x) x> 0? (x) : 0 (x) : - (x))' – ouah

+0

프로그램은 [negative negative 8을 출력한다] (http://ideone.com/H434lj), x : -x'를'#define abs (x) 8. – dasblinkenlight

+0

최근에 표현식이'#define abs (x) (x> 0? x : -x)'인 경우 변경된 코드를 게시 한 것으로 나타났습니다 (http : // ideone.com/7WY5Ie), @ dasblinkenlight, 방법 감사합니다. –

답변

2

짧은 대답은 "매크로가 함수가 아니기 때문에"입니다.

긴 대답은 매크로 매개 변수는 프로그램의 텍스트로 확장되는, 그래서 C 컴파일러는이 긴 표현 본다 : 확장에서

3 - 5 > 0 ? 3 - 5 : -3 - 5 > 0 ? 3 - 5 > 0 ? 3 - 5 : -3 - 5 : -3 - 5 > 0 ? 3 - 5 : -3 - 5 

를, 음의 부호는 음수 산출 (3-5)에하지, 3 적용 8.

매크로 정의에서 x 주위에 괄호를 배치하여이 문제를 해결할 수 있지만 인라인 함수를 정의하는 것이 더 좋습니다.