0

我正在做一个项目,我有如下代码:

#define NAME() Array

inline NAME()* NAME()_init (void* arg0){return (NAME()*)Object_init(arg0);}

但我得到以下结果:

inline Array* Array _init (void* arg0){return (Array*)Object_init(arg0);}

在“Array”和“_init”之间有一个空格因为这是一个函数名,我显然不想要这个空格。有谁知道怎么把空间弄出来?

4

2 回答 2

2

将两个标记组合为一个(例如,组合调用NAME()and的结果_init)的唯一方法是使用连接运算符 ( ##)。您需要执行以下操作:

#define REAL_CONCATENATE(x, y) x ## y
#define CONCATENATE(x, y) REAL_CONCATENATE(x, y)

#define NAME() Array
inline NAME()* CONCATENATE(NAME(), _init) (void* arg0){return (NAME()*)Object_init(arg0);}

的,额外的间接级别是必要的

请注意,如果不带参数,则不需要使用类似函数的宏,因此您可以轻松使用:

#define NAME Array
inline NAME* CONCATENATE(NAME, _init) (void* arg0){return (NAME*)Object_init(arg0);}
于 2010-06-12T17:22:52.853 回答
1

您应该像这样更改语义:

#define NAME(X) Array##X
inline NAME()* NAME(_init) (void* arg0){return (NAME()*)Object_init(arg0);}

编辑:至少它适用于 GNU cpp。

EDIT2:也尝试过-ansi -pedantic,它似乎在没有警告的情况下工作......

于 2010-06-12T17:21:26.780 回答