宏中的GCC变量类型

时间:2014-03-20 19:21:02

标签: c gcc macros

我想在字符串或变量名中嵌入变量类型的名称。

例如:

#define SYM(var) sym_##typeof(var)##_num
int foo;
typedef struct s_type { int x; } s_t;
s_t bar;
int SYM(foo) = 1;
int SYM(bar) = 2;

会生成

int foo;
int sym_int_num = 1;
int sym_s_t_num = 2;

我知道如何在不将类型名称传递给宏的情况下执行此操作吗?

1 个答案:

答案 0 :(得分:0)

即使GCC具有typeof()运算符,也无法在C中完成。我花了一点时间思考为什么。

在语义处理期间解释Typeof。预处理器在执行任何语义处理之前很久就会运行,甚至在任何语法处理之前运行。预处理器仅适用于文本标记,而不适用于语言语义,而typeof()绝对是语义属性。

(C ++模板可以进行类型替换,因为在语义处理过程中会对其进行解释。)