1

如何使用宏 (#define) 创建 typedef?

由于各种原因,我正在尝试使用宏在 C 中进行 typedef'ing。类似于 C++ 的模板行。

作为一个例子,我希望预处理器扩展#definetypedefstruct“内容”成员的类型为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 来做,因为它很有趣。

4

3 回答 3

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__

编译证明

于 2012-07-14T11:16:37.657 回答
0

只需将最后两行代码放入 main() 或任何它肯定会工作的函数中。

于 2012-07-14T12:35:29.513 回答
0

我在评论中发帖是因为我认为这太琐碎了,但这里是:

当然,您不只是将引用的代码粘贴到 gcc 中,是吗?您不能只在任何函数之外执行代码。将最后一行放在函数中。

于 2012-07-16T18:02:54.557 回答