我正在使用宏在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)
让它发挥作用。
但它不方便,因为我要么必须引入一个巨大的定义块,要么我必须为每个函数键入键值类型,这不是很优雅。
有什么想法吗?