什么是“(.' 表示定义宏时



我在虚幻引擎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';
}

事实上,这就是这告诉预处理器要做的事情。 (与往常一样,预处理器不了解语言的语法。

#define FOO(...)

这意味着您的宏可以接受可变数量的参数。详情请看这里。

最新更新