누군가가 다음 전처리 문을 해독하도록 도와주십시오.전 처리기 문장의 해독
#define ALLOC(x,y) x _##y; x* y = &_##y;
여기서 x 유형의 일부 변수 y에 대한 일부 메모리 할당이 완료되었음을 알고 있습니다. 그러나 위의 문에서 ##의 목적이 무엇인지 확실하지 않습니다. 누군가가 나를 도울 수 있으면 좋을 것입니다.
누군가가 다음 전처리 문을 해독하도록 도와주십시오.전 처리기 문장의 해독
#define ALLOC(x,y) x _##y; x* y = &_##y;
여기서 x 유형의 일부 변수 y에 대한 일부 메모리 할당이 완료되었음을 알고 있습니다. 그러나 위의 문에서 ##의 목적이 무엇인지 확실하지 않습니다. 누군가가 나를 도울 수 있으면 좋을 것입니다.
이것은 token pasting operator으로 알려져 있습니다.
정확하게 기억한다면 ##는 "문자열 자체"를 연결하는 것을 의미합니다.
사례에 대한 ALLOC (int, var2) ==> int_var2;
ALLOC(int, integer)
매크로 호출되는 곳에서 다음 코드를 만들 것 같은 INT * VAR2 = &는 _var2
사용 현황 :
int _integer;
int* integer = &_integer;
또는 영어로 스택에 "x"유형의 객체를 "할당"하고 그것을 가리키는 "y"를 만듭니다. –
토큰 붙여 연산자 (##) 두 개 이상의 토큰 중 하나의 토큰을 만들어야하는 경우에 사용됩니다. 그것없이
, 즉
#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
를 형성하기 위해 토큰
_
및 토큰b
합류 전처리 기가 어떻게 처리되는지보기 위해 전처리기를 실행할 수 있다는 것을 알고 계십니까? 이해하는 것이 좋겠지 만 일단 구체적인 것을 가지고 이해하고 무엇을 테스트 해보면 전처리기를 독립적으로 실행할 수 있습니다. –