|
Как соблюсти ПРАВИЛА ХОРОШЕГО ТОНА при написании программ на Си?, (Как компоновать проект? Что оставлять в 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 4 2009, 22:46
|

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

|
TNX. Где-то так и предполагал, что второй вариант будет более правильным и логичным. Следующий вопрос. Каков общепринятый порядок расположения компонентов хедера? Это на мой взгляд далеко не праздный вопрос. Хотелось бы впредь выработать четкие правила создания логично скомпонованных удобочитаемых и удоборазбираемых программ. Для своего потребления я могу программу наклепать как угодно, все равно она будет работать согласно установленного алгоритма, но для других она будет выглядеть диковато и не удобоваримо. Я не совсем новичок в программировании, пописывал программы еще когда вычислительные машины были большими и очень большими.  Но в основном я - схемотехник, поэтому это было как бы приложением к основной работе. Когда появились "писюки", писать программы на них как-то не приходилось. К микроконтроллерам приступил наперевес с ассемблером. Но когда задачи усложнились, писать на ассемблере стало чрезмерно времязатратным. Поэтому, преодолев некоторые фобии, решил освоиться с Си. Конечно, embedded C весьма специфичен, но вроде уже как освоился и программу "чувствую". Но, понимая, что это немаловажно, также решил упорядочить стиль создания программ, дабы писАть  не только под себя. Вот, собственно говоря, это и есть основной причиной моих вопросов. Кстати, хотя по Си перечитал литературы достаточно, но так и не нашел четких ЛАКОНИЧНО изложенных правил. Может кто подскажет такой источник. Предпочтительно - русскоязычный. Это не значит, что по-английски не читаю, но предпочитаю родной язык, как более удобный в любом случае.
|
|
|
|
Сообщений в этой теме
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 _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 MrYuran Ещё одно из немаловажных правил хорошего тона, к о... May 5 2009, 07:35 zltigo Цитата(MrYuran @ May 5 2009, 10:35) ...ед... May 5 2009, 08:17  Dog Pawlowa Цитата(zltigo @ May 5 2009, 11:17) Лобово... May 5 2009, 08:23   Legotron Цитата(Dog Pawlowa @ May 5 2009, 12:23) Е... May 5 2009, 08:33    Dog Pawlowa Цитата(Legotron @ May 5 2009, 11:33) Зато... May 5 2009, 08:42     zltigo Цитата(Dog Pawlowa @ May 5 2009, 11:42) П... May 5 2009, 08:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|