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

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


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Ещё одно из немаловажных правил хорошего тона, к осознанию которого я шёл пару лет, это автодокументация кода.
Причём систематизированная, единообразная по шаблону.
Постепенно прихожу к комментариям в стиле doxy, в дальнейшем планирую требовать этого же и от коллег.

Очень упрощает жизнь не только другим, но и себе, когда спустя несколько лет смотришь в код и соображаешь - ё-моё, чтож я сделал-то?!


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 5 2009, 08:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 5 2009, 08:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(zltigo @ May 5 2009, 11:17) *
Лобовое неразумное решение приводящее к созданию лишних зависимостей и скрывающее суть проекта от человека.

Еще и время компиляции увеличивается, поскольку весь проект будет перекомпилирован при корректировке любого h-файла.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Legotron
сообщение May 5 2009, 08:33
Сообщение #5


инопланетянин
***

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



Цитата(Dog Pawlowa @ May 5 2009, 12:23) *
Еще и время компиляции увеличивается, поскольку весь проект будет перекомпилирован при корректировке любого h-файла.

Согласен, увеличивается.. недостаток
Зато не надо вспоминать, "какие же h-ники мне нужны в этом c-файле?" или компилировать до тех пор, пока компилятор не прекратит ругаться на отсутствие h-файлов, добавляя их по одному
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 5 2009, 08:42
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Legotron @ May 5 2009, 11:33) *
Зато не надо вспоминать ...

Признаться, я сам использую комбинированный способ smile.gif

Но на самом то деле при грамотном проектировании сверху вниз обеспечивается иерархия файлов/уровней взаимодействия, и количество включаемых файлов не так то и велико.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 5 2009, 08:50
Сообщение #7


Гуру
******

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



Цитата(Dog Pawlowa @ May 5 2009, 11:42) *
Признаться, я сам использую комбинированный способ smile.gif

Это нормально, вот например, некий файл "rtos.h" у меня в него включены в том числе несколько *.h индивидуальных под контроллер и проект конфигурационных файлов и всякие парные *.c "queue.h", "task.h" и так далее. Система меняется относительно редко, избыточность включения небольшая, логически все достаточно связано.


--------------------
Feci, quod potui, faciant meliora potentes
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
- - 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


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

 


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


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