Разница между двумя различными реализациями декларирующих структур - PullRequest
2 голосов
/ 12 апреля 2011
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;
};

Большое спасибо за любые предложения,

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

В первом случае у вас есть один тип данных, а во втором у вас есть два (где 2-й тип определяется по первому).Нет разницы в сгенерированном коде.Многим людям удобнее читать / писать код, в котором пропущено дополнительное ключевое слово struct.

3 голосов
/ 12 апреля 2011

В реализации нет ничего другого.Это просто вопрос выбора.Я предпочитаю второй с точки зрения читабельности.Дополнительный "_tag" уродлив.Стиль кодирования ядра Linux предпочитает все определения структуры без typedef.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...