문제

특수 명명 체계에 따라 새로운 기능을 정의하기 위해 다음 매크로가 있습니다.

#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 ( '#') 전처리 연산자를 사용할 때 알아야 할 한 가지는 모든 경우에 제대로 작동하기 위해 추가 간접 수준을 사용해야한다는 것입니다.

이 작업을 수행하지 않고 토큰을 포장하는 연산자에게 전달 된 항목이 매크로 자체라면, 아마도 원하는 것이 아닌 결과를 얻을 수 있습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top