C在当前宏块中使用定义的宏

时间:2015-07-12 18:21:12

标签: c macros

我正在使用宏在C中实现通用哈希表。

作为一个例子,我将键值类型定义为

#define h_key_type int 
#define h_val_type int

然后我将put函数定义为:

#define H_PUT(key_type, val_type) \
                void key_type##_put(...)

H_PUT(h_key_type, h_val_type);

但是,在预处理后,处理后的源代码变为

void h_key_type_put(...)

即使我将函数声明更改为:

#define H_PUT() \
           void h_key_type##_put(...)

它仍被替换为:

 void h_key_type_put(...)

所以我必须使用

#define H_PUT(key_type, val_type) \
                void key_type##_put(...)

H_PUT(int, int)

让它发挥作用。

但它不方便,因为我要么必须引入一个巨大的定义块,要么我必须为每个函数键入键值类型,这不是很优雅。

有什么想法吗?

0 个答案:

没有答案