Цитата(zltigo @ Feb 29 2008, 16:25)

Для начала я не вижу логики в действиях программиста дважды определившего одну и ту-же структуру...
Однако, поведение любого компилятора молча глотающего подобные выражения сочту совершенно неправильным.
Не надо так сразу кипятится

, я же разобраться хочу, а не просто так по клавишам стучу. Очень часто простейшие мысли в голову почему-то сразу не приходит. Теперь дошло, действительно удобнее только один раз описывать. Но компилятор, ИМХО, мог бы ограничится предупреждением, поскольку структуры идентичны.
Цитата
... но при этом дает некоторые средства для контроля над типами уменьшающие вероятность потенциальных ошибок...
Насчет контроля типов тут много копей сломано. Но я в этом вопросе так и не разобрался. Вот вы
говорили:
Цитата
#define и typedef по разному обрабатываются - один препроцессором, а второй компилятором. Компилятор (или дополнительные утилиты типа lint) могут дополнительно заниматься котролем типов, а препроцессор - нет.
Тут хотя случай без #define, но похоже. Чем все-таки будет отличаться обработка структур CCC и DDD? И там и там структура, и там и там ее обрабатывает компилятор:
Код
typedef struct cc {
char a;
int b;
} ccc_t;
ccc_t CCC;
struct dd {
char a;
int b;
} DDD;
Кстати, если бы был #define, то после него все равно явное описание типа обрабатывалось бы компилятором.
Вот Сергей Борщ в том обсуждении
сказал: "Поэтому надо больше читать тематической литературы. Разница есть."
А я никак не могу найти ту "техническую литературу", где этот вопрос освящен. Например у Кернигана и Ричи (2-е изд) применение typedef никак не связывается с улучшенным (добавочным) контролем типов:
Цитата
Следует подчеркнуть, что объявление typedef не создает объявления нового типа, оно лишь сообщает новое имя уже существующему типу. Никакого нового смысла эти новые имена не несут, они объявляют переменные в точности с теми же свойствами, как если бы те были объявлены напрямую без переименования типа. Фактически typedef аналогичен #define с тем лишь отличием, что при интерпретации компилятором он может справиться с такой текстовой подстановкой, которая не может быть обработана препроцессором...
Помимо просто эстетических соображений, для применения typedef существуют две важные причины. Первая - параметризация программы, связанная с проблемой переносимости...
Вторая причина, побуждающая к применению typedef,- желание сделать более ясным текст программы...
И все... Так где об этом можно почитать? Гуру, дайте ссылку