2011-04-12 64 views
2
gcc 4.4.4 
c89 

我在想以下两种实现定义结构的真正区别是什么?声明结构的2种不同实现之间的区别

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

非常感谢您的任何建议,

回答

4

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

3

实现中没有什么不同。它只是一个选择问题。我更喜欢第二个在可读性方面。额外的“_tag”是丑陋的。 Linux内核编码风格倾向于所有没有typedef的结构定义。

相关问题