среда, 22 июля 2009 г.

typedef struct vs. struct

сижу копаюсь в коде(а чем еще программеру заниматся?) а там все данные определены в стиле:

typedef struct data_structure_name
{

} data_structure_name;

в принципе в моем случае все это может быть сделано и обычным struct, без typedef. А интенсивность использования этого патерна наводит на один вопрос: признавайтесь, кто еще помнит для чего такое нужно и какую проблему такой код решает?
а то в коде, который разгребаю, оно встречается и так, где обычный стракт никогда не создаст проблем. похоже что шаблон остался, а знания о нем пропали.

6 комментариев:

Andrew комментирует...

Вроде бы в C нельзя было иначе обьявлять структуры.

Rasta комментирует...

Не

typedef struct data_structure_name
{

} struct data_structure_name;

а

typedef struct data_structure_name
{

} data_structure_name;

Это позволяет потом в коде писать просто data_structure_name, а не struct data_structure_name.

cencio комментирует...

2Andrew:
обьявление структуры без тайпдефа в С полностью валидно

2Rasta:
второй стракт это очепятку, точней результат невнимательного копипейста, сейчас исправлю.
но ведь ничто не мешает мне в коде обьявить структуру без тайпдефа, а потом при обьявлении переменной упускать слово стракт, так что тут есть нюанс :)

bialix комментирует...

если доступ к полям структуры используется более чем в одном модуле, то без typedef никак.

с другой стороны даже внутри одного модуля объявление структуры как отдельного типа позволяет сделать более читаемый код, ИМХО.

cencio комментирует...

не понял про доступ к полям структуры из разных модулей? какая тут разница есть тайпдеф или нету? выносим обьявление в хиадер, включаем его где нужно и все будет доступно

Yuriy Volkov комментирует...

точно не помню, но ключевое слово struct надо было по-моему указывать перед именем структуры при вызове sizeof() для malloc например