반응형
전 처리기 지시문에서 ## (이중 해시)는 무엇을합니까?
#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
반응형
'developer tip' 카테고리의 다른 글
Rails : 마지막에 null이있는 주문 (0) | 2020.10.15 |
---|---|
탐색 창에서 메뉴 항목의 텍스트 색상 변경 (0) | 2020.10.15 |
온라인 IDE에서 이상하게 작동하는 프로그램 (0) | 2020.10.14 |
ASP.Net 마스터 페이지 및 파일 경로 문제 (0) | 2020.10.14 |
쿼리 문자열에서 여러 매개 변수를 전달하는 방법 (0) | 2020.10.14 |