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

먼저 다음과 같이 ##을 사용하여 ab를 붙이는 CONCAT 매크로를 정의합니다.

// a와 b를 붙이는 CONCAT 매크로 정의
#define CONCAT(a, b) a##b

printfCONCAT(1, 2)를 출력해보면 12가 나옵니다. 즉, 1과 2를 더해서 3이 나오는 것이 아니라 1과 2를 그대로 붙여서 12가 됩니다.

그림 75‑6 #define으로 두 값 붙이기

##을 좀 더 응용하면 다음과 같이 매크로로 함수를 호출할 수도 있습니다.

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

먼저 다음과 같이 hellox를 붙이는 EXECUTER 매크로를 정의했습니다. 이때 x뒤에 괄호를 붙여 함수 호출이라는 것을 나타내줍니다.

// hello와 x를 붙여서 호출하는 EXECUTER 매크로 정의
#define EXECUTER(x) hello##x()

EXECUTER에 1을 넣으면 hello와 1이 붙게 되므로 hello1 함수를 호출하고, 2를 넣으면 hello2 함수를 호출합니다.

EXECUTER(1);    // hello1 함수 호출

EXECUTER(2);    // hello2 함수 호출
그림 75‑7 #define으로 값을 붙여서 함수 호출

지금까지 매크로를 사용하는 방법을 배웠는데 매크로는 C 언어에서 상당히 까다로운 부분에 속합니다. 여기서는 매크로를 만들 때 괄호와 연산자 우선순위를 고려해야 한다는 점만 기억하면 됩니다. 나중에 매크로를 만들거나 분석해야 할 때 다시 돌아와서 찾아보세요.