본문 바로가기
프로그래밍/C

전처리기 ] # 문자열화 연산자

by eteo 2022. 12. 9.

 

# 연산자 : 문자열 치환

# 연산자는 함수형 매크로에서 매개변수를 문자열로 변환하는데 사용된다. 또한 매크로가 문자열과 나란히 쓰이면 하나의 문자열로 간주된다.

 

따라서 다음과 같은 결과가 나온다.

#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를 합쳐주는 역할을 한다.