我想在字符串或变量名中嵌入变量类型的名称。
例如:
#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;
我知道如何在不将类型名称传递给宏的情况下执行此操作吗?
答案 0 :(得分:0)
即使GCC具有typeof()运算符,也无法在C中完成。我花了一点时间思考为什么。
在语义处理期间解释Typeof。预处理器在执行任何语义处理之前很久就会运行,甚至在任何语法处理之前运行。预处理器仅适用于文本标记,而不适用于语言语义,而typeof()绝对是语义属性。
(C ++模板可以进行类型替换,因为在语义处理过程中会对其进行解释。)