C Macro 문법

C Macro 문법

C언어의 Macro 문법을 정리한다.

1. 문자열화 연산자 (#)

1
2
3
4
5
6
7
8
#include <stdio.h>
#define PRINT(s)    printf(#s)

int main()
{
    PRINT(THIS IS TEST CODE);                          
    return 0;
}
[Code 1] # Macro 예제
THIS IS TEST CODE
[Shell 1] # Macro 예제의 출력

문자열화 연산자 (#)는 Macro Parameter를 문자열로 변경한다. " "를 붙이는 효과와 동일하다. [Code 1]은 THIS IS TEST CODE Macro Parameter가 printf() 함수의 문자열로 넘어가는 예제를 보여주고 있다.

2. Token 붙여넣기 연산자 (##)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <stdio.h>

#define INT_i(n)        int i##n = n;
#define PRINT(n)        printf("i%d = %d\n", n, i##n)

int main()
{
    INT_i(0);
    PRINT(0);

    return 0;
}
[Code 2] ## Macro 예제
i0 = 0
[Shell 2] ## Macro 예제의 출력

Token 붙여넣기 연산자 (##)는 분리된 Token을 하나로 합친다. [Code 2]에서 INT_i() Macro 함수는 int i0 = 0으로 치환되고, PRINT() Macro 함수는 printf("i%d = %d\n", 0, i0)으로 치환된다.

3. 가변 인자 Macro

1
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
[Code 3] 1999년 표준의 가변 인자 Macro
1
#define debug(format, args...) fprintf (stderr, format, args)
[Code 4] GCC 가변 인자 Macro

1999년 C 표준에서는 ...__VA_ARGS__을 이용하여 가변 인자를 나타낸다. [Code 3]은 1999년 C 표준 문법의 가변 인자 Macro의 사용법을 나타내고 있다. GCC에서는 [name]...[name]을 이용하여 가변 인자를 나타낸다. [Code 4]는 GCC 가변 인자 Macro의 사용법을 나타내고 있다.

4. 참조