|
Как соблюсти ПРАВИЛА ХОРОШЕГО ТОНА при написании программ на Си?, (Как компоновать проект? Что оставлять в xxx.c, а что в xxx.h ?) |
|
|
|
May 4 2009, 18:14
|

Местный
  
Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279

|
Написал было объемистое предисловие, но Фаерфокс глюкнул и оно исчезло, поэтому обойдусь без него.
Перешел с ассемблера на Си, создал ряд проектов, работающих, но так и не получил четкого представления о том, как нужно оформлять программу на Си по ПРАВИЛАМ. Может сказалась былая практика программирования на Фортране и Паскале. Наибольшее непонимание у меня вызывает то, что нужно оставлять в xxx.c, а что выносить в xxx.h. Виной тому - ужасная чересполосица в куче разных сторонних проектов, которые довелось разбирать в процессе освоения Си. В одних проектах водораздел один, в других - совсем иной. И даже в атмеловских аппноутах - тоже полный разнобой.
Пользуюсь IAR EWAVR-ом.
Вот пара примеров написания программ, с которыми встречался: Имеются: основной модуль - xxx.c, хедер к нему - xxx.h, пара модулей - yyy.c, zzz.c и хедеры к ним yyy.h, zzz.h.
Первый вариант организации проекта. В проект подключен основной модуль xxx.c, в котором в самом начале подключен при помощи директив #include необходимый набор стандартных библиотек, хедер xxx.h, а также два дополнительных модуля yyy.c и zzz.c. В самих модулях yyy.c и zzz.c при помощи этих директив подключены yyy.h и zzz.h соответственно. В основном модуле располагается главная программа и набор функций, относящихся непосредственно к ней. В хедере располагаются глобальные определения, описания глобальных переменных и констант, а также прототипы функций основного модуля. В дополнительных модулях располагаются функции модулей, а в хедерах дополнительных модулей располагаются определения, переменные, константы и прототипы, касающиеся этих модулей.
Во втором варианте организации проекта дополнительные модули включены в проект подобно основному. В основном же модуле при помощи #include подключены yyy.h и zzz.h. Также они подключены с помощью этой директивы и в yyy.c и zzz.c соответственно.
Оба проекта полностью рабочие, потому как в конечном счете все полностью завязано и в первом и во втором случае.
Встречался также с вариантами написания программ, где, например, описания переменных вынесены в ***.c вместо ***.h.
Имею два конкретных вопроса:
1. КАК нужно подключать в проект модули и хедеры согласно ПРАВИЛ ХОРОШЕГО ТОНА написания программ на языке Си? 2. ЧТО нужно согласно тех же ПРАВИЛ выносить в ***.h, а что оставлять в ***.c?
Четкого, внятного, однозначного ответа я так и не нашел. Хотелось бы узнать мнение уважаемого сообщества.
PS: Конечно, можно компоновать как попало, имея в результате полноценный рабочий код, но вопрос в том, как общепринято ПРАВИЛЬНО это выполнять?
|
|
|
|
|
 |
Ответов
|
May 5 2009, 08:17
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(MrYuran @ May 5 2009, 10:35)  ...единообразная по шаблону. Постепенно прихожу к комментариям в стиле doxy, в дальнейшем планирую требовать этого же и от коллег. Люди не компьютры - шаблонное, дежурное, формальное доксигеновское комментирование есть тупость и зло, зачастую не меньшее, чем полное отсутствие комментариев. Цитата(Legotron @ May 5 2009, 10:36)  Также я во всех проектах создаю файл includes.h, который включен во все *.с, больше никаких include в с-файлах.. Лобовое неразумное решение приводящее к созданию лишних зависимостей и скрывающее суть проекта от человека. Некоторые хидеры могут объединяться в общие логические группы, пусть и несущие небольшую избыточность, но огульное сваливание всего в одну кучу....
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 5 2009, 08:33
|

инопланетянин
  
Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832

|
Цитата(Dog Pawlowa @ May 5 2009, 12:23)  Еще и время компиляции увеличивается, поскольку весь проект будет перекомпилирован при корректировке любого h-файла. Согласен, увеличивается.. недостаток Зато не надо вспоминать, "какие же h-ники мне нужны в этом c-файле?" или компилировать до тех пор, пока компилятор не прекратит ругаться на отсутствие h-файлов, добавляя их по одному
|
|
|
|
|
May 5 2009, 08:50
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Dog Pawlowa @ May 5 2009, 11:42)  Признаться, я сам использую комбинированный способ  Это нормально, вот например, некий файл "rtos.h" у меня в него включены в том числе несколько *.h индивидуальных под контроллер и проект конфигурационных файлов и всякие парные *.c "queue.h", "task.h" и так далее. Система меняется относительно редко, избыточность включения небольшая, логически все достаточно связано.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
kv_addr Как соблюсти ПРАВИЛА ХОРОШЕГО ТОНА при написании программ на Си? May 4 2009, 18:14 zltigo C Си нет ничего проще. В хидерах только прототипы ... May 4 2009, 19:22 HARMHARM Цитата(kv_addr @ May 4 2009, 21:14) Первы... May 4 2009, 19:23 Rst7 ЦитатаНикакие *.c никогда через include не включаю... May 4 2009, 19:45 zltigo Цитата(Rst7 @ May 4 2009, 22:45) Мне каже... May 4 2009, 19:55 Rst7 ЦитатаИсключения только подтверждают правило
Ну В... May 4 2009, 20:14 zltigo Цитата(Rst7 @ May 4 2009, 23:14) Ну Вы же... May 4 2009, 20:18 Rst7 Цитатаэто все основоположники римского права
Я в ... May 4 2009, 20:46 zltigo Цитата(Rst7 @ May 4 2009, 23:46) Можем по... May 5 2009, 07:00 kv_addr TNX. Где-то так и предполагал, что второй вариант ... May 4 2009, 22:46 _Pasha Цитата(kv_addr @ May 5 2009, 01:46) Коне... May 5 2009, 07:01 Legotron Цитата(kv_addr @ May 5 2009, 02:46) Следу... May 5 2009, 07:36 Slash Кое какие правила есть в книге "Искусство про... May 5 2009, 06:31 zltigo Цитата(Slash @ May 5 2009, 09:31) Кое как... May 5 2009, 07:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|