定义宏时`(...)`是什么意思?

马克斯·诺斯

我在虚幻引擎4的源代码中发现了这一点,但没有意识到。它的具体实例是:

#undef UCLASS

#define UCLASS(...) \
ARadialForceActor_EVENTPARM

我是一个相当新的程序员,这种宏对我来说是陌生的。我的猜测是,它正在定义一个宏,该宏将采用该函数的每个重载版本UCLASS(换句话说,命名的函数的每个实例UCLASS,而不管参数的类型和数量如何)并将其替换为变量ARadialForceActor_EVENTPARM那是对的吗?如果没有,有谁知道这意味着什么?我尝试编写一个代码片段对此进行测试,但是它返回了error: "." may not appear in macro parameter list如果我对宏是正确的,我将在下面包括它,在这种情况下,如果有人可以指出我的代码在哪里出错,我将不胜感激:

#include <iostream>

#define foo( . . . ) bar

using namespace std;

int foo() {cout <<54321<<endl;}

int main()
{  bar=12345;
   cout<<bar<<endl;

   return 0;
}
肿胀

您对的含义的猜测#define foo(...) bar是正确的。您的错误在于. . ....相同。他们不是。...点之间必须没有空格。如果我将您的程序修改为要读取

#include <iostream>

#define foo(...) bar

using std::cout;

int foo()
{
   cout << 54321 << '\n';
}

int main()
{
   bar = 12345;
   cout << bar << '\n';
   return 0;
}

(请注意其他样式上的更正;您的代码的未来读者将感谢您)

然后我得到foo()bar 在函数定义中被替换为一致的错误消息,就好像您已经编写了

int bar
{
    cout << 54321 << '\n';
}

实际上,这就是告诉预处理器执行的操作。(与往常一样,预处理器不了解该语言本身的语法。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ receivePortSync未定义”是什么意思?

来自分类Dev

@interface中带有##的宏,这是什么意思?

来自分类Dev

子程序定义中的冒号是什么意思?

来自分类Dev

“宏”在Objective-C中是什么意思?

来自分类Dev

这个typedef定义是什么意思?

来自分类Dev

这个定义是什么意思?

来自分类Dev

这样的定义是什么意思?

来自分类Dev

该定义中“最左边”是什么意思?

来自分类Dev

这个宏是什么意思?

来自分类Dev

BigDecimal的定义是什么意思?

来自分类Dev

调用FindFirstFile时,“ <”是什么意思?

来自分类Dev

{}在检查变量时是什么意思?

来自分类Dev

这个C宏是什么意思?

来自分类Dev

在Clojure中,“&”在功能/宏签名中是什么意思?

来自分类Dev

运行make时^是什么意思?

来自分类Dev

gradle任务定义中<<是什么意思

来自分类Dev

定义lambda时[&]是什么意思?

来自分类Dev

调用函数时(_)是什么意思?

来自分类Dev

构造函数后面的宏。这是什么意思?

来自分类Dev

为什么glibc中的宏-ENOSYS是什么意思?

来自分类Dev

定义宏时“ ## x”是什么意思

来自分类Dev

这个宏功能是什么意思?

来自分类Dev

这样的定义是什么意思?

来自分类Dev

以下结构定义是什么意思?

来自分类Dev

这个宏是什么意思?

来自分类Dev

BigDecimal的定义是什么意思?

来自分类Dev

安装时,-t是什么意思?

来自分类Dev

MonadReader 的实例定义是什么意思?

来自分类Dev

宏“#define DPRINTF(...)”是什么意思?