реклама на сайте
подробности

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


Местный
***

Группа: Свой
Сообщений: 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: Конечно, можно компоновать как попало, имея в результате полноценный рабочий код, но вопрос в том, как общепринято ПРАВИЛЬНО это выполнять?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение May 4 2009, 19:45
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Никакие *.c никогда через include не включаются - на то есть линкер.


Мне кажется, слишком категорично. Иногда делаю отдельный .c-инклуд для уменьшения видимых размеров исходника с сохранением одной единицы компиляции. Иногда выношу константы в отдельный .c-файл, когда эти константы static и генерируются отдельным софтом в пребилде.

Конечно, можно обойтись без этого, но мне иногда так удобнее. Собственно, это больше издержки отсутствия пространств имен в
plain c.


Вспомнилось... Третий турбопаскаль под CP/M умел собирать код под всю память только при инклуде исходников с диска и компиляции на диск. Иначе не лезло smile.gif Но это так, ностальжи...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - 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
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 09:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01349 секунд с 7
ELECTRONIX ©2004-2016