##는 전처리기 연산자 중 하나로, 두 토큰을 하나로 결합해 새로운 식별자(변수명, 함수명 등)를 생성할 때 유용하다.

 

아래 예시를 보면 이해하기 쉽다.

#define JOIN(x, y) x##y

int helloWorld = 42;

int main() {
    printf("%d\n", JOIN(hello, World));  // JOIN(hello, World) → helloWorld
    return 0;
}

-> hello와 world가 결합되어 helloWorld가 되고, 이는 이전에 int형으로 선언한 변수 이름이름이다.

JOIN() 자리에 전처리기를 통해 helloWorld 가 들어가있는 것과 같다.

 

#define CLIENT(idx) Client client_##idx(idx)

#include <iostream>
using namespace std;

class Client {
public:
	Client(int idx) : name(idx) {}
	void SayMyName() { cout << name << endl; }
private:
	int name;
};

int main() {
    CLIENT(0);
    CLIENT(1);
    CLIENT(2);
    client_0.SayMyName(); // -> 0
    client_1.SayMyName(); // -> 1
    client_2.SayMyName(); // -> 2
}

CLIENT(0) 의 자리에 Client client_0(0)  이 들어간 것과 같다.

'공부 > C\C++' 카테고리의 다른 글

c 매크로 - 함수형 매크로 ()  (0) 2025.06.28
c++ using typedef 차이  (0) 2025.06.28
typeid 키워드  (0) 2025.06.28
c extern 키워드 (with 선언과 정의)  (0) 2025.06.24
std::atomic<T>::compare_exchange_weak  (0) 2025.06.14

+ Recent posts