0

我想要一个宏,它可以将变量的类型与另一个令牌合并以创建新令牌。一个随机的例子:

int var;
int make_token(var);

这将变成:

int var;
int var_int;

我试图像这样定义宏:

#define make_token(x) x ## _ ## typeof(x)

但是整个事情被扩展到:

int var;
int var_typeof(var)

有没有办法实现这一点而不必在宏的参数中传递变量的类型?

4

2 回答 2

3

由于typeof是在编译的后期确定的,经过预处理,这是不可能的。

也不typeof扩展为类型标识符;它不适用于文本/代码级别,而是在语义级别。它是编译器解释并用于确定其内部数据结构类型的关键字。

您唯一能做的就是将类型添加到宏中:

#define TYPED_VARIABLE(type, identifier) type identifier ## _ ## type

然而,正如一位智者最近所说:“使用匈牙利符号是无脑的,是一个巨大的错误,所以不要这样做!” 我完全同意。

于 2013-06-29T14:47:36.750 回答
0

对于要定义的每种类型,您都需要一个宏。

于 2013-06-29T14:31:43.290 回答