# 연산자 : 문자열 치환
# 연산자는 함수형 매크로에서 매개변수를 문자열로 변환하는데 사용된다. 또한 매크로가 문자열과 나란히 쓰이면 하나의 문자열로 간주된다.
따라서 다음과 같은 결과가 나온다.
#include <stdio.h>
#define STR(x) #x
int main()
{
printf("%s\n", STR(01234)"56789");
return 0;
}
문제가 발생하는 경우는 아래와 같은 경우다.
#include <stdio.h>
#define NAME HongGilDong
#define STR(x) #x
int main()
{
puts(STR(NAME));
return 0;
}
HongGilDong이 출력되길 의도했지만 NAME이 출력되었다. 이에 대한 해결 방법은 다음과 같다.
#define STR_(x) #x
#define STR(x) STR_(x)
확인해보자.
#include <stdio.h>
#define NAME HongGilDong
#define STR_(x) #x
#define STR(x) STR_(x)
int main()
{
puts(STR(NAME));
return 0;
}
이런 해결법이 가능한 이유는 STR(x)는 STR_(x) 로 확장되고, 여기서 한단계 더 확장이 필요한데 이때는 이미 NAME과 같은 매크로 개체가 대체된 이후이기 때문이다.
참고로 ## 는 토큰 결합 연산자로 왼쪽 operand 와 오른쪽 operand를 합쳐주는 역할을 한다.
'프로그래밍 > C' 카테고리의 다른 글
C/C++ ] tick / 시간 측정하기 (0) | 2022.12.14 |
---|---|
C ] 가변인자 매크로를 활용한 디버그 로그 남기기, Predefined macros (0) | 2022.12.11 |
C ] 빅엔디안 리틀엔디안 변환함수 구현 + 매크로 함수 작성시 주의점 (0) | 2022.10.22 |
C ] memset 함수 구현 (0) | 2022.10.09 |
C, Linux ] pthread 사용해 보기 (0) | 2022.08.25 |