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


上面的内容摘自Unreal 4,我知道我可以在虚幻的论坛上提出这个问题,但是我认为这是一个一般的C ++问题,值得在这里提出。

我知道第一行定义了一个宏,但是我并不精通C ++中的预处理器,所以我迷路了。逻辑告诉我反斜杠表示声明继续到下一行。

FThreadSafeStaticStat看起来有点像模板,但是里面有#的代码,而且是我在C ++中从未见过的语法

有人可以告诉我这是什么意思吗?我了解您可能无法使用Unreal 4,但这只是我不了解的语法。

最佳答案

##是用于串联的预处理器运算符。

所以如果你用

DEFINE_STAT(foo)

在代码中的任何地方,它都被替换为

struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;

在编译代码之前。

这是我的a blog post中的另一个示例,以进一步说明这一点。

#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()

关于c++ - ##(双哈希)在预处理程序指令中做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55563244/

10-13 06:31