我想要一个宏,它可以将变量的类型与另一个令牌合并以创建新令牌。一个随机的例子:
int var;
int make_token(var);
这将变成:
int var;
int var_int;
我试图像这样定义宏:
#define make_token(x) x ## _ ## typeof(x)
但是整个事情被扩展到:
int var;
int var_typeof(var)
有没有办法实现这一点而不必在宏的参数中传递变量的类型?
我想要一个宏,它可以将变量的类型与另一个令牌合并以创建新令牌。一个随机的例子:
int var;
int make_token(var);
这将变成:
int var;
int var_int;
我试图像这样定义宏:
#define make_token(x) x ## _ ## typeof(x)
但是整个事情被扩展到:
int var;
int var_typeof(var)
有没有办法实现这一点而不必在宏的参数中传递变量的类型?
由于typeof
是在编译的后期确定的,经过预处理,这是不可能的。
也不typeof
扩展为类型标识符;它不适用于文本/代码级别,而是在语义级别。它是编译器解释并用于确定其内部数据结构类型的关键字。
您唯一能做的就是将类型添加到宏中:
#define TYPED_VARIABLE(type, identifier) type identifier ## _ ## type
然而,正如一位智者最近所说:“使用匈牙利符号是无脑的,是一个巨大的错误,所以不要这样做!” 我完全同意。
对于要定义的每种类型,您都需要一个宏。