Что делает # # (двойной хэш) в директиве препроцессора?
#define DEFINE_STAT(Stat)
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;
приведенная выше строка взята из Unreal 4, и я знаю, что могу задать ее на нереальных форумах, но я думаю, что это общий вопрос C++, который заслуживает того, чтобы его задавали здесь.
Я понимаю, что первая строка определяет макрос, однако я не очень хорошо разбираюсь в препроцессорных махинациях в C++, и поэтому я потерялся там. Логика говорит мне, что обратная косая черта означает, что объявление продолжается на следующую строку.
FThreadSafeStaticStat выглядит немного как шаблон, но там происходит #и синтаксис, который я никогда не видел раньше в C++
может кто-нибудь сказать мне, что это значит? Я понимаю, что у вас может не быть доступа к Unreal 4, но это просто синтаксис, который я не понимаю.
1 ответ:
##является оператором препроцессора для конкатенации.если вы используете
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().
Comments