-
- все зависит от задачи. У меня вот включаются. Есть файл так называемого содержимого, который генерит макросы для всего проекта. В каждом h файле модулей есть дефайны и тайпдефы которые используются в этой таблице. abivan(371 знак., 28.04.2025 18:12, картинка, картинка)
- Не стоит. Более того, если вам это понадобилось, то это нехороший звоночек. Cкpипaч(243 знак., 28.04.2025 14:20)
- Зачем туда все подряд включать? Эдак, дойдет до какого-нибудь "супер-пупер.h", сгенеренный вот так: Eddy_Em(89 знак., 28.04.2025 14:13)
- Там? Toчкa oпopы(1 знак., 28.04.2025 13:34, ссылка)
- Я конечно не программист, но по-моему хидеры нужно включать
непосредственно в .с-файл (причем только те .h, которые необходимы
в данном конкретном .c-файле). Зачем плодить какие-то "главные"
заголовочные файлы с другими заголовками? - reZident(28.04.2025 13:28)
- Например, сделан удачный модуль. Tyмблep(450 знак., 28.04.2025 17:30)
- У меня, например, почти все модули имеют свои прерывания. Нужно задать приоритет. Причём, приоритеты задаются группе модулей, например, последовательный интерфейс + таймер - это канал связи плюс начальная обработка данных. У группы общий приоритет, но несколько файлов исходников, несколько заголовочных файлов. Поэтому все приоритеты прописаны в одном, главном файле. Nikolay_Po(437 знак., 28.04.2025 13:35)
- У меня в главном лежит глобальная раскладка приоритетов прерываний
- в виде определений препроцессора. Так же лежат какие-то общие для
всей системы параметры, которые могут быть нужны модулям. Так же,
там могут быть объявления глобальных переменных, типа текущего
состояния, которые так же нужны модулям. Поэтому да, я включаю свой
main.h в исходники практически всех модулей. - Nikolay_Po(28.04.2025 13:21)
- У меня такие штуки раскиданы по модулям. Можно сказать, у вас для
этого есть отдельный модуль, который как бы общий и ничей, как
социалистическая собственность. По сути, это протест против
модульной системы. КМК, надо раскидать по более локальным модулям,
даже если с некоторой натяжкой. - SciFi(28.04.2025 13:35)
- Нет, это не модуль. Хотя и существует файл main.c, функций в нём
для других модулей не определено. Просто в main.h вынесены общие
определения. Не функции, а просто дефайны. В крайнем случае,
переменная глобального состояния системы или её геттер. - Nikolay_Po(28.04.2025 13:37)
- У меня "система" с её "состоянием" была бы модулем. Но это уже
философическое. - SciFi(28.04.2025 13:39)
- У меня несколько подсистем. У каждой свой конечный автомат. Плюс
конечный автомат всей системы, главный. В одном модуле это будет
слишком громоздко. А как вы бы раздали приоритеты прерываний в
модулях? Лезть в каждый отдельно? - Nikolay_Po(28.04.2025 13:43)
- Возможно, собрал бы приоритеты в таблицу и сделал бы для неё
отдельный хедер. Или сделал приоритеты аргументами функций init()
различных модулей и вызывал бы их кучно из main(). Но не валил бы
это всё в кучу "общее всякое разное", у меня на это аллергия. - SciFi(28.04.2025 13:54)
- Хмм... Ну, таблицу прерываний понятно, можно вынести. Но у меня модули, по большей части, автономные. Смотрят на глобальное состояние системы и исполняют назначенное этому состоянию. Что нужно другим модулям - те забирают из структур, объявленных частными заголовками модулей. А вот общее состояние системы - оно действительно общее. Мне его что, в отдельный файл "общее состояние системы.h" вынести? Nikolay_Po(14 знак., 28.04.2025 14:03)
- Возможно, собрал бы приоритеты в таблицу и сделал бы для неё
отдельный хедер. Или сделал приоритеты аргументами функций init()
различных модулей и вызывал бы их кучно из main(). Но не валил бы
это всё в кучу "общее всякое разное", у меня на это аллергия. - SciFi(28.04.2025 13:54)
- У меня несколько подсистем. У каждой свой конечный автомат. Плюс
конечный автомат всей системы, главный. В одном модуле это будет
слишком громоздко. А как вы бы раздали приоритеты прерываний в
модулях? Лезть в каждый отдельно? - Nikolay_Po(28.04.2025 13:43)
- У меня "система" с её "состоянием" была бы модулем. Но это уже
философическое. - SciFi(28.04.2025 13:39)
- Нет, это не модуль. Хотя и существует файл main.c, функций в нём
для других модулей не определено. Просто в main.h вынесены общие
определения. Не функции, а просто дефайны. В крайнем случае,
переменная глобального состояния системы или её геттер. - Nikolay_Po(28.04.2025 13:37)
- У меня такие штуки раскиданы по модулям. Можно сказать, у вас для
этого есть отдельный модуль, который как бы общий и ничей, как
социалистическая собственность. По сути, это протест против
модульной системы. КМК, надо раскидать по более локальным модулям,
даже если с некоторой натяжкой. - SciFi(28.04.2025 13:35)
- Что за "главный"? У меня нет такого. Что у вас там? - SciFi(28.04.2025 13:13)
- Включение тестовых функций, которых нет в конечном релизе по
#define DEBUG_FUNC 1 , мегаглавные константы которые влияют на весь
проект. - Mty1(28.04.2025 15:39)
- Это делается при вызове cmake или make… - Eddy_Em(28.04.2025 15:43)
- Ага. Ты ещё скажи, скриптами в IDE Eclipse прописать изабыть где. В
идеале, исходники должны быть самодостаточными и не зависеть от
cmake/make файлов, которых в целевой IDE может не оказаться в явном
виде. - Nikolay_Po(28.04.2025 16:10)
- Если в дереве проекта нет ни Makefile, ни CMakeLists.txt, ни
другого способа сборки (хоть автомейк устаревший), то такого
"разработчика" надо гнать ссаными тряпками куда подальше! - Eddy_Em(28.04.2025 17:10)
- ...ко мне 8) Гоните ко мне. - Cкpипaч(28.04.2025 17:17)
- Зачем вам рукожопы, которые даже свой "прожэкт" собрать не могут? - Eddy_Em(28.04.2025 17:18)
- Я тебе потом расскажу. Когда буду на яхте по Средиземному морю катать :))) - Cкpипaч(28.04.2025 17:20)
- Зачем вам рукожопы, которые даже свой "прожэкт" собрать не могут? - Eddy_Em(28.04.2025 17:18)
- ...ко мне 8) Гоните ко мне. - Cкpипaч(28.04.2025 17:17)
- Если в дереве проекта нет ни Makefile, ни CMakeLists.txt, ни
другого способа сборки (хоть автомейк устаревший), то такого
"разработчика" надо гнать ссаными тряпками куда подальше! - Eddy_Em(28.04.2025 17:10)
- Ага. Ты ещё скажи, скриптами в IDE Eclipse прописать изабыть где. В
идеале, исходники должны быть самодостаточными и не зависеть от
cmake/make файлов, которых в целевой IDE может не оказаться в явном
виде. - Nikolay_Po(28.04.2025 16:10)
- Это делается при вызове cmake или make… - Eddy_Em(28.04.2025 15:43)
- Включение тестовых функций, которых нет в конечном релизе по
#define DEBUG_FUNC 1 , мегаглавные константы которые влияют на весь
проект. - Mty1(28.04.2025 15:39)