##는 전처리기 연산자 중 하나로, 두 토큰을 하나로 결합해 새로운 식별자(변수명, 함수명 등)를 생성할 때 유용하다.
아래 예시를 보면 이해하기 쉽다.
#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 |