1. # 연산자
매크로에서 # 연산자는 문자열로 변환(치환) 시켜주는 연산자.
// !< EX)
#define MACRO_PRINT(s) printf(#s)
void main()
{
MACRO_PRINT(Test Value);
}
MACRO_PRINT 매크로에서 s앞에 # 빠지면 오류 발생.
매크로변수 s는 'Test Value' 받는데 "" 없기에 하나의 '변수'로 인식해 치환.
만약 매크로의 #s 에서 # 뺀다면 "Test Value" 앞뒤로 따옴표 붙여 실행.
즉, #은 받아온 매크로 변수를 문자열로 바꿔주는 앞뒤에 따옴표를 붙이는 것과 같은 의미.
2. ## 연산자
##은 두 개 토큰을 이어 주거나 붙여준다.
#define MACRO_INT_nNumber(x) int nNumber##x;
위와 같은 매크로가 있고, MACRO_INT(0) 이라는 매크로를 사용했다고 가정하면
x 변수를 nNumber##x 와 같이 nNumber하고 붙여준 int형 변수를 선언.
즉, 위의 매크로와 같은 표현은
int nNumber0;
nNumber와 0을 붙여서 하나의 변수로 만들어 진다.
// !< EX)
#define MACRO_INT_nNumber(x) int nNumber##x;
#define MACRO_SUM(res, x) ((res) += (nNumber##x))
#define MACRO_PRINT(x) printf("nNumber%d = %d \n", x, nNumber##x)
void main()
{
int res = 0;
for(int32 nIndex = 0; nIndex < 5; ++nIndex)
{
MACRO_INT_nNumber(nIndex);
MACRO_PRINT(nIndex);
MACRO_SUM(res, nIndex);
}
printf("SUM(res) : %d \n", res);
}
>>
nNumber0 = 0
nNumber1 = 1
nNumber2 = 2
nNumber3 = 3
nNumber4 = 4
nNumber5 = 5
SUM(res) : 15
출저 : https://norux.me/22
.
'[ Programing ] > C++' 카테고리의 다른 글
[C++] 설정 시간에서 현재 시간 까지의 시간(TimeStamp) 구하기. (0) | 2023.10.17 |
---|---|
C++ 콘솔 창. (0) | 2022.04.07 |
C++ MiniDump Review (0) | 2022.01.21 |
Memory Access Violation - 메모리 접근 위반. (0) | 2022.01.19 |
C++ malloc, new 메모리 할당의 차이점. (0) | 2021.11.25 |