본문 바로가기
코딩취미/C,C++

토큰 결합 연산자(##)의 정의와 종류 : 토큰연결, 문자열화, 매크로

by 브링블링 2024. 1. 5.
728x90

토큰 결합 연산자의 정의와 종류

토큰 결합 연산자(##)는 전처리기에서 사용되며, 두 개의 토큰을 하나로 결합하는 역할을 합니다. 이 연산자는 매크로 정의에서 주로 사용되며, 매크로를 더 유연하게 사용할 수 있도록 합니다. 그리고 코드의 재사용성과 가독성을 향상시킵니다.

토큰 결합 연산자의 정의:

토큰 결합 연산자는 다음과 같이 정의됩니다. 정의에서 ##는 두 개의 토큰을 결합하는 연산자입니다.

#define CONCATENATE(x, y) x##y

 

토큰 결합 연산자의 종류:

Simple Token Concatenation (단순 토큰 연결):

  • 가장 기본적인 형태의 토큰 결합입니다. 두 개의 토큰을 그대로 이어붙입니다.
#define CONCAT(x, y) x##y

int main() {
    int xy = 42;
    return 0;
}

 

Token Pasting with Expansion (토큰 페이스팅과 확장):

  • 매크로 매개변수를 다른 매크로의 일부로 사용하여 두 개의 토큰을 결합합니다.
#define VAR_NAME(prefix, suffix) prefix##suffix

int main() {
    int VAR_NAME(variable, 1) = 10;
    // int variable1 = 10;
    return 0;
}

 

Concatenation in Macro Definitions (매크로 정의 내에서의 결합):

  • 매크로 정의 내에서 토큰을 결합하여 새로운 식별자를 만듭니다.
#define DECLARE_VARIABLE(type, name) type name##_variable

int main() {
    DECLARE_VARIABLE(int, my) = 42;
    // int my_variable = 42;
    return 0;
}

 

Stringizing and Concatenation Together (문자열화와 함께 사용):

  • 토큰을 결합하면서 문자열화(#)도 함께 사용할 수 있습니다.
#define CREATE_STRING(name) #name##_string
#define DECLARE_STRING_VARIABLE(name) const char* CREATE_STRING(name) = "Hello, World!"

int main() {
    DECLARE_STRING_VARIABLE(greeting);
    // const char* greeting_string = "Hello, World!";
    return 0;
}

 

Conditional Token Concatenation (조건부 토큰 연결):

  • 조건문을 사용하여 특정 조건에서만 토큰을 결합할 수 있습니다.
#define ENABLED_FEATURE 1

#if ENABLED_FEATURE
#define FEATURE_SUFFIX _enabled
#else
#define FEATURE_SUFFIX _disabled
#endif

int main() {
    int feature_state FEATURE_SUFFIX = 42;
    // int feature_state_enabled = 42;
    return 0;
}
728x90