C 매크로의 중공 공간을 강제로?
-
11-09-2019 - |
문제
특수 명명 체계에 따라 새로운 기능을 정의하기 위해 다음 매크로가 있습니다.
#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }
그러나 전처리 기는 항상 연결합니다 void
그리고 ##func_STUB
그러나 나는 분명히 그것이 그 위치에서 공백을 보존하기를 원합니다.
나는 단지 어떤 문자열을 선발 할 수 있다는 것을 알고 있습니다. ##func_STUB
, 그러나 이것은 내가 원하는 것이 아닙니다. 이것을 어떻게 해결할 수 있습니까?
해결책
나는 당신이 정말로 원하는 것이 다음과 더 가깝다고 생각합니다.
#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }
그러나 당신은 또한보아야합니다 이것은 그렇게 연결되어 있습니다 토큰 붙여 넣기 연산자의 동작에 대한 추가 세부 사항이 있습니다.
Token-Paste ( '##') 또는 Stringizing ( '#') 전처리 연산자를 사용할 때 알아야 할 한 가지는 모든 경우에 제대로 작동하기 위해 추가 간접 수준을 사용해야한다는 것입니다.
이 작업을 수행하지 않고 토큰을 포장하는 연산자에게 전달 된 항목이 매크로 자체라면, 아마도 원하는 것이 아닌 결과를 얻을 수 있습니다 ...
제휴하지 않습니다 StackOverflow