질문좀 [ 매크로 함수 부분 ]

#include iostream

#include iomanip

using namespace std;
#define def_sqr(x) ( (x) * (x) );
inline int inl_sqr(int x);
int main

{

int a, b, c;
a = 2;

b = def_sqr(++a);

cout macro : b endl;
a = 2;

b = inl_sqr(++a);

cout inline : b endl;
return 0;

}
inline int inl_sqr(int x)

{

return x * x;

}
결과 :
macro : 16

inline : 9
---------------------------------------------
이렇게 나오는데 매크로 함수로 원래 컴파일시 대입된다는 걸로 알고 있습니다.
그렇게 되면
a = 2;

b = def_sqr(++a); - b = ++a * ++a 이런식으로 될텐데

b = 3 * 4가 되어 12가 출력되는게 맞는게 아닌가요?
이해 한다고 생각하고 있었는데 책에서 출력이 16이라된다니 다시 헤깔리네요.ㅠ

아시는분 자세히 설명좀 해주세요.ㅠ

댓글 1

  • 김예쁨 2026.01.13

    ++ 연산자는 일반 수학에는 없는 연산자이기때문에 우선순위에 있어서 헷갈리기 쉽습니다.
    님도 아시다시피 ++ 연산자는 * 에 우선합니다.
    그럼 ++ 연산자 두개가 먼저 계산되고, a 의 값은 4가 됩니다.
    그리고 그 다음 연산자인 a * a = 4 * 4 = 16이되는 것입니다.

    다시 쓰자면

    ( ( ++ a ) * ( ++ a ) )
    = ( ( a ) * ( ++ a ) ) // 여기서 a == 3
    = ( ( a ) * ( a ) )

프로그램 개발일반 다른 글

목록