声明结构的两种不同实现之间的区别

时间:2011-04-12 08:12:00

标签: c data-structures

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;
};

非常感谢任何建议,

2 个答案:

答案 0 :(得分:4)

在第一种情况下,您有一种数据类型,第二种情况下您有两种数据类型(其中第二种类型是第一种类型)。生成的代码没有区别。对于许多人来说,读取/编写代码更方便,省略了额外的struct关键字。

答案 1 :(得分:3)

实现中没有什么不同。这只是一个选择问题。在可读性方面我更喜欢第二个。额外的“_tag”很难看。 Linux内核编码样式更喜欢没有typedef的所有结构定义。