#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
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 매크로 do {...} while (0) 용도 (0) | 2022.10.09 |
---|---|
[C++] 자바의 <T extends E>처럼 템플릿 타입 제한하는 방법 (0) | 2022.01.02 |
[C++] Array to Pointer Decay (0) | 2021.01.29 |
[C++17] std::any에 대해 (0) | 2020.10.03 |
Visual studio Google Test 사용 예제 (0) | 2020.08.09 |