75.6 매크로 연결 사용하기
#define에서 ##을 사용하면 여러 코드(값)를 붙일 수 있습니다.
- #define 매크로이름(a, b) a##b
다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.
macro_concatenation.c
#include <stdio.h> // a와 b를 붙이는 CONCAT 매크로 정의 #define CONCAT(a, b) a##b int main() { printf("%d\n", CONCAT(1, 2)); // 12 return 0; }
실행 결과
12
먼저 다음과 같이 ##을 사용하여 a와 b를 붙이는 CONCAT 매크로를 정의합니다.
// a와 b를 붙이는 CONCAT 매크로 정의 #define CONCAT(a, b) a##b
printf로 CONCAT(1, 2)를 출력해보면 12가 나옵니다. 즉, 1과 2를 더해서 3이 나오는 것이 아니라 1과 2를 그대로 붙여서 12가 됩니다.
##을 좀 더 응용하면 다음과 같이 매크로로 함수를 호출할 수도 있습니다.
macro_concatenation_function_call.c
#include <stdio.h> // hello와 x를 붙여서 호출하는 EXECUTER 매크로 정의 #define EXECUTER(x) hello##x() void hello1() { printf("hello 1\n"); } void hello2() { printf("hello 2\n"); } int main() { EXECUTER(1); // hello1 함수 호출 EXECUTER(2); // hello2 함수 호출 return 0; }
실행 결과
hello 1 hello 2
먼저 다음과 같이 hello와 x를 붙이는 EXECUTER 매크로를 정의했습니다. 이때 x뒤에 괄호를 붙여 함수 호출이라는 것을 나타내줍니다.
// hello와 x를 붙여서 호출하는 EXECUTER 매크로 정의 #define EXECUTER(x) hello##x()
EXECUTER에 1을 넣으면 hello와 1이 붙게 되므로 hello1 함수를 호출하고, 2를 넣으면 hello2 함수를 호출합니다.
EXECUTER(1); // hello1 함수 호출 EXECUTER(2); // hello2 함수 호출
지금까지 매크로를 사용하는 방법을 배웠는데 매크로는 C 언어에서 상당히 까다로운 부분에 속합니다. 여기서는 매크로를 만들 때 괄호와 연산자 우선순위를 고려해야 한다는 점만 기억하면 됩니다. 나중에 매크로를 만들거나 분석해야 할 때 다시 돌아와서 찾아보세요.