#define 매크로에서 쓸 수 있는 #, ## 연산자에 대해 알아봅시다

 

# 연산자 (stringizing operator)

샵 연산자는 매크로 파라미터를 스트링 리터럴(string literal)로 변환합니다.

", \ 문자는 escape 됩니다

 

// stringizer.cpp
#include <stdio.h>
#define stringer( x ) printf_s( #x "\n" )
int main() {
   stringer( In quotes in the printf function call );
   stringer( "In quotes when printed to the screen" );
   stringer( "This: \"  prints an escaped double quote" );
}

위처럼 문자열을 받아 뒤에다가 \n 을 붙여서 출력하는 매크로를 만들었다고 했을 때,

int main() {
   printf_s( "In quotes in the printf function call" "\n" );
   printf_s( "\"In quotes when printed to the screen\"" "\n" );
   printf_s( "\"This: \\\" prints an escaped double quote\"" "\n" );
}

전처리 과정에서 위처럼 변환되고

In quotes in the printf function call
"In quotes when printed to the screen"
"This: \"  prints an escaped double quote"

최종적으로 출력은 이렇게 됩니다.

 

## 연산자 (token-pasting operator)

## 연산자는 토큰을 결합해주는 연산자입니다

 

#define X(n) x##n

예를 들어 위와 같은 매크로를 정의했을 때 X(1)은 x1 변수를 입력한 것과 동일합니다.

 

Reference

 

Stringizing operator (#)

Learn more about: Stringizing operator (#)

learn.microsoft.com

 

반응형