반응형

매크로 함수

 

 

매크로 함수 매크로 정의 정처리기인 #define을 이용하여 만들어지는 기호 함수이다.

 

사용하는 방법에 따라 실제 함수를 사용한 것과 같은 효과가 나타날 수도 있지만

 

실제 함수와는 전혀 다른 형태의 함수로 소스 코드가 치환된다는 점에서 실제 함수와 다른 독특한 특징을 가지고 있다.

 

아래의 예제를 통해 매크로 함수의 특징에 대해 봐 보자.

 

참고로 매크로 함수는

 

"함수이름(인자)" 형태로 되어 있으며 함수 이름과 괄호 사이에는 띄어쓰기가 허용되지 않는다.

 

-

 

test38.c
0.00MB

 

 

 

-

 

위 예제는 두 개의 매크로 함수 MAX DOUBLE을 정의하고 있다.

 

MAX 함수 소스 코드가 컴파일되기 전에 삼항 연산자로 변환되어

 

2개의 값 중에서 큰 값을 반환할 수 있도록 코드가 치환되어 최댓값을 구할 수 있게 된다.

 

DOUBLE 함수 입력된 값에서 2를 곱한 내용의 코드로 치환되고 있다.

 

 

10행의 실행 결과를 보면 약간 특이한 결과가 나왔을 것이다.

 

DOUBLE(3+2)의 결과는 일반적으로 10이라는 결과가 나올 것으로 예상하지만 7이라는 결과가 나왔다.

 

그 이유는 바로 매크로 함수는 소스 코드를 컴파일하기 전에

 

매크로 함수가 사용된 곳에 소스 코드를 단순히 치환하는 역할만 하기 때문이다.

 

 

10행에서 소스 코드가 컴파일되기 전 전처리기에 의해 수행되는 코드는 다음과 같은 내용으로 치환되게 된다.

 

-

 

 

-

 

따라서 결과 값으로 예상했던 10이 나오지 않고 7이란 값이 나오게 되는 것이다.

 

매크로 함수는 단순히 소스 코드의 내용만 치환한다는 특징 때문에 나타나는 결과

 

매크로 함수를 사용하게 될 때는 이 점을 주의해서 사용해야 한다.

반응형

'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글

20. 조건부 컴파일  (0) 2021.02.01
19. 매크로 연산자  (0) 2021.02.01
17. 매크로 정의  (0) 2021.02.01
16. 전처리기  (0) 2021.02.01
15. scanf() 함수  (0) 2021.02.01

+ Recent posts