2011-04-12 63 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的結構定義。

相關問題