gcc 4.4.4
c89
我想知道以下两个定义结构的实现之间的真正区别是什么?
channel.h file
struct channel_tag;
struct channel_tag* init_channel(size_t channel_id);
void dispose_channels(struct channel_tag *channel);
channel.c file
typedef struct channel_tag {
size_t channel_id;
} channel_t;
===================第二次实施===============
channel.h file
typedef struct channel_tag channel;
channel* init_channel(size_t channel_id);
void dispose_channels(channel *channel);
channel.c file
struct channel_tag {
size_t channel_id;
};
非常感谢任何建议,
答案 0 :(得分:4)
在第一种情况下,您有一种数据类型,第二种情况下您有两种数据类型(其中第二种类型是第一种类型)。生成的代码没有区别。对于许多人来说,读取/编写代码更方便,省略了额外的struct
关键字。
答案 1 :(得分:3)
实现中没有什么不同。这只是一个选择问题。在可读性方面我更喜欢第二个。额外的“_tag”很难看。 Linux内核编码样式更喜欢没有typedef的所有结构定义。