이 글에서는 C 언어에서 여러 줄 매크로(multiline macro)를 작성하는 방법을 알아보겠습니다.
여러 줄 매크로는 함수처럼 정의할 수 있지만, 일반적인 함수와 달리 다음과 같은 규칙을 반드시 지켜야 합니다.
여러 줄 매크로 작성 시 주의사항
- 매크로의 각 줄이 끝날 때마다 반드시 역슬래시(\) 문자를 붙여야 합니다. 이는 전처리기(preprocessor)에게 다음 줄과 현재 줄이 하나의 명령으로 이어져 있음을 알려주는 줄 연결(line continuation) 기능입니다.
- 중괄호(
{})를 사용해 매크로 본문을 감싸고 그대로}로 끝내면 컴파일 오류가 발생할 수 있습니다. - 따라서 본문 전체를 소괄호( )로 한 번 더 감싸주는 것이 안전합니다. 소괄호로 감싸면 여러 문장을 하나의 표현식처럼 취급할 수 있어 오류를 방지할 수 있습니다.
예제 코드
아래 프로그램을 통해 여러 줄 매크로의 실제 사용 방법을 확인해 보세요.
#include<stdio.h>
#define PRINT(x, str) ({\
printf("The number %d", x);\
printf(" is ");\
printf(#str);\
printf("\n");\
})
int main() {
int x = 10;
if(x % 2 == 0){
PRINT(x, EVEN);
}
}실행 결과
The number 10 is EVEN
위 예제에서 PRINT 매크로는 네 개의 printf 문으로 구성되어 있으며, 각 줄 끝에 역슬래시(\)가 붙어 있습니다. 또한 본문 전체가 ({ ... }) 형태로 감싸져 있어 여러 문장을 하나의 블록으로 안전하게 처리할 수 있습니다. 매크로 인자 #str은 문자열화(stringize) 연산자로, 전달된 인자를 문자열 리터럴로 변환하여 출력하는 역할을 합니다.