75.2 함수 모양의 매크로 정의하기

#define은 함수 모양의 매크로도 정의할 수 있습니다.

  • #define 매크로이름(x) 함수(x)
  • #define 매크로이름(x) 코드조합

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

macro_function.c

#include <stdio.h>

#define PRINT_NUM(x) printf("%d\n", x)    // printf("%d\n", x)를 PRINT_NUM(x)로 정의

int main()
{
    PRINT_NUM(10);    // 10: printf("%d\n", 10)

    PRINT_NUM(20);    // 20: printf("%d\n", 20)

    return 0;
}

실행 결과

10
20

#define으로 함수 모양의 매크로를 정의할 때는 ( ) (괄호)안에 자료형은 생략하고 인수의 이름만 지정합니다. 그리고 호출할 함수를 작성한 뒤 매크로에 지정했던 인수를 그대로 함수 안에 넣으면 됩니다.

그림 75‑2 함수 모양의 매크로 정의

전처리기 과정을 거치면 PRINT_NUM(x)은 다음과 같이 printf("%d\n, 10), printf("%d\n", 20)으로 바뀌게 됩니다.

그림 75‑3 #define PRINT_NUM printf("%d\n", x) 적용
참고 | 함수를 사용하지 못하도록 만들려면?

#define을 사용하면 함수가 아무 동작도 하지 않도록 만들 수 있습니다. 다음과 같이 함수 이름으로 된 빈 매크로를 지정하면 이후에 해당 이름으로 함수를 호출해도 사용할 수 없게 됩니다.

#define printf    // printf를 빈 매크로로 정의

printf("Hello, world!");    // 아무것도 출력되지 않음