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;
}
THIS IS TEST CODE
문자열화 연산자 (#)는 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;
}
i0 = 0
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__)
1
#define debug(format, args...) fprintf (stderr, format, args)
1999년 C 표준에서는 …와 __VA_ARGS__을 이용하여 가변 인자를 나타낸다. [Code 3]은 1999년 C 표준 문법의 가변 인자 Macro의 사용법을 나타내고 있다. GCC에서는 [name]…와 [name]을 이용하여 가변 인자를 나타낸다. [Code 4]는 GCC 가변 인자 Macro의 사용법을 나타내고 있다.