2011-01-17 2 views
0

누군가가 다음 전처리 문을 해독하도록 도와주십시오.전 처리기 문장의 해독

#define ALLOC(x,y)  x _##y; x* y = &_##y; 

여기서 x 유형의 일부 변수 y에 대한 일부 메모리 할당이 완료되었음을 알고 있습니다. 그러나 위의 문에서 ##의 목적이 무엇인지 확실하지 않습니다. 누군가가 나를 도울 수 있으면 좋을 것입니다.

+0

를 형성하기 위해 토큰 _ 및 토큰 b 합류 전처리 기가 어떻게 처리되는지보기 위해 전처리기를 실행할 수 있다는 것을 알고 계십니까? 이해하는 것이 좋겠지 만 일단 구체적인 것을 가지고 이해하고 무엇을 테스트 해보면 전처리기를 독립적으로 실행할 수 있습니다. –

답변

0

정확하게 기억한다면 ##는 "문자열 자체"를 연결하는 것을 의미합니다.

사례에 대한 ALLOC (int, var2) ==> int_var2;

ALLOC(int, integer) 

매크로 호출되는 곳에서 다음 코드를 만들 것 같은 INT * VAR2 = &는 _var2

1

사용 현황 :

int _integer; 
int* integer = &_integer; 
+0

또는 영어로 스택에 "x"유형의 객체를 "할당"하고 그것을 가리키는 "y"를 만듭니다. –

3

토큰 붙여 연산자 (##) 두 개 이상의 토큰 중 하나의 토큰을 만들어야하는 경우에 사용됩니다. 그것없이

, 즉

#define ALLOC(x,y) x _y; x* y = &_y; 

ALLOC(a,b) 

이 진출 것 : 전처리 B하지만 _y와 Y를 대체 할 알고 있기 때문에

a _y; a* b = &_y; 

는 완전히 다른 토큰입니다. ## 연산자

(즉, 귀하의 예제)

ALLOC(a,b) 

이 진출 것 :

a _b; a* b = &_b; 

## 토큰 _b