developer tip

전 처리기 지시문에서 ## (이중 해시)는 무엇을합니까?

copycodes 2020. 10. 14. 07:57
반응형

전 처리기 지시문에서 ## (이중 해시)는 무엇을합니까?


#define DEFINE_STAT(Stat) \
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;

위의 라인은 Unreal 4에서 가져온 것이며, 저는 Unreal 포럼에서 질문 할 수 있다는 것을 알고 있습니다.하지만 이것은 여기에서 질문해야하는 일반적인 C ++ 질문이라고 생각합니다.

첫 번째 줄이 매크로를 정의한다는 것을 이해하지만 C ++의 전 처리기 헛소리에 정통하지 않아서 거기에서 길을 잃었습니다. 논리는 백 슬래시가 선언이 다음 줄로 계속됨을 의미한다고 말합니다.

FThreadSafeStaticStat는 템플릿과 비슷해 보이지만 C ++에서 이전에 본 적이없는 구문과 #이 있습니다.

누군가 이것이 의미하는 바를 말해 줄 수 있습니까? Unreal 4에 액세스 할 수 없을 수도 있다는 점을 이해합니다.하지만 이해하지 못하는 구문 일뿐입니다.


## 연결을위한 전 처리기 연산자입니다.

그래서 당신이 사용한다면

DEFINE_STAT(foo)

코드의 어느 곳에서나

struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;

코드가 컴파일되기 전에.

여기에 이것을 더 설명하기 위해 내 블로그 게시물또 다른 예가 있습니다 .

#include <stdio.h>

#define decode(s,t,u,m,p,e,d) m ## s ## u ## t
#define begin decode(a,n,i,m,a,t,e)

int begin()
{
    printf("Stumped?\n");
}

이 프로그램은 성공적으로 컴파일 및 실행되며 다음 출력을 생성합니다.

Stumped?

이 코드에서 전처리 기가 호출되면

  • begin 다음으로 대체됩니다. decode(a,n,i,m,a,t,e)
  • decode(a,n,i,m,a,t,e) 다음으로 대체됩니다. m ## a ## i ## n
  • m ## a ## i ## n 다음으로 대체됩니다. main

따라서 효율적 begin()으로 대체된다 main().

참고 URL : https://stackoverflow.com/questions/22975073/what-does-double-hash-do-in-a-preprocessor-directive

반응형