[C/C++] 매크로 함수 (Macro)

프로그래밍 시험 결과가 좋지 않아서 공부하게 되었다. 새롭게 배우거나, 아직 익숙하지 않은 부분을 기록으로 남기려고 한다. 개인적으로 프로그래밍을 하다 보면 동일한 코드를 계속 작성하는 경우가 있는데, 이러한 습관이 실수를 늘린다고 한다. 그래서 매크로 함수를 사용하면 코드가 간결해져서 좋고, 실수를 줄일 수 있다고 한다. (모든 분이 선호하는 방법은 절대 아니라고 한다)

#include<stdio.h>

//MK: 매크로 함수 사용 예제
#define FOR(i, n) for(int i = 1; i <= n; i++) 

int main(void)
{
   int numCulture = 10;
   char cultureString[10];
   FOR(j, numCulture) //MK: 이 부분이 for(int j; j <= numCulture; j++) 로 변경됨 
   {
      scanf("%s", &cultureString);
      printf("%s\n", cultureString);
   }
}

위 코드를 컴파일 하면 FOR(i, n)는 j, numCulture을 사용하여 위 define 해놓은 문장으로 치환된다. 매크로 함수의 경우 기존 함수와 달리 #define 되어 있는 문구 그대로 치환이 된다고 한다. 그래서 만약 아래와 같이 작성하면 비슷해 보이는 매크로 함수 이지만 결과 값이 달라진다고 한다.

//MK: Example 1
#define square(x) x*x
printf("square(3) : %d \n", square(3+1));//printf("square(3) : %d \n", 3+1*3+1);

//MK: Example 2
#define square(x) (x)*(x)
printf("square(3) : %d \n", square(3+1)); //printf("square(3) : %d \n", (3+1)*(3+1));

주어진 문장을 그대로 치환하기 때문에 괄호를 표기하고 하지 않은 경우 결과 값의 차이가 발생한다. 이렇게 매크로 함수 사용으로 인한 실수를 줄이기 위해서  inline함수를 사용하는 것이 더 좋다고 한다.

출처

  1. http://itguru.tistory.com/99

Leave a Comment