如何使用宏(#define)创建typedef?
由于各种原因,我试图用一个宏来做C中的typedef.ing C ++的模板行。
作为示例,我希望预处理器扩展#define
和typedef
一个struct
,其“内容”成员的类型为char
:
#define DEFINE_FOO_TYPE(content_type__, content_type_name__) \
typedef struct { \
content_type__ content; \
} content_type_name__
DEFINE_FOO_TYPE(char, foo_t);
foo_t foo_var;
foo_var.content = 'g';
显然事实并非如此。是否可以在C中完成这些事情,或者是C ++模板的唯一方式?
按照“为什么不使用C ++模板?”来解决问题。答案是我正在尝试用C语言来做这件事,因为它很有趣。
答案 0 :(得分:4)
试试这个:
#define DEFINE_FOO_TYPE(content_type__, content_type_name__) \
typedef struct { \
content_type__ content; \
} content_type_name__
DEFINE_FOO_TYPE(char, foo_t);
int main() {
foo_t foo_var;
foo_var.content = 'g';
return 0;
}
即。使用content_type_name__
代替element_type_name__
答案 1 :(得分:0)
简单地将最后两行代码放入main() 或任何它肯定会起作用的功能。
答案 2 :(得分:0)
我发表了评论,因为我认为这太微不足道了,但现在是:
当然,你不只是将引用的代码粘贴到gcc中,是吗?您不能只在任何函数之外执行代码。将最后一行放在函数中。