gpt4 book ai didi

c++ - ##(双哈希)在预处理器指令中做了什么?

转载 作者:IT老高 更新时间:2023-10-28 12:05:51 26 4
gpt4 key购买 nike

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

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

我知道第一行定义了一个宏,但是我不太熟悉 C++ 中的预处理器恶作剧,所以我迷路了。逻辑告诉我反斜杠意味着声明继续到下一行。

FThreadSafeStaticStat 看起来有点像模板,但其中有 #'s 和我以前在 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/22975073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com