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

 
 
> Проект из многих файлов на C, Как использовать заголовочные файлы?
ViKo
сообщение Mar 23 2014, 06:57
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Давно терзаюсь вопросами.
Имею проект из нескольких c-файлов. Один из них - главный, main.c, в остальных - некие функции (как разбить проект на части - тоже вопрос смутный, как и понятия "драйвер", "core").
Чтобы функции могли вызываться из любого файла, нужно описать их прототипы. Я их описываю в заголовочных h-файлах, соответствующих c-файлам (display.c - display.h). А чтобы не включать всю кучу h-файлов во все c-файлы, собрал их в одну кучу в main.h. Вот его и включаю во все c-файлы (и в main.c тоже). Где-то видел, такие h-файлы называются "helper".
Чтобы h-файлы не включались в проект по нескольку раз, заключаю все содержимое в макроопределения:
Код
#ifndef DISPLAY_H
#define DISPLAY_H
...
#endif

Также есть отдельные h-файлы, для частных включений.
С глобальными переменными дело обстоит чуть сложнее. В своем файле они должны быть определены, а в остальных заданы, как extern. Для этого пользуюсь макроопределениями (создал в main.h):
Код
#ifndef VAR_DECLS
#define _DECL extern
#define _INIT(x)
#else
#define _DECL
#define _INIT(x) = x
#endif

Только в одном main.c файле задаю определение #define VAR_DECLS, поэтому все переменные будут определены в main.c, независимо от того, в каком h-файле они описаны.

Не слишком ли я запутываю свои проекты? Например, гложет мысль, как правильнее - использовать display.h в main.h или в display.c?
Поделитесь своими решениями. По каким критериям разбиваете проект на файлы? Где храните переменные?
Как передаете глобальные макроопределения (например, #define BUFF_SIZE 4096)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobok0
сообщение Mar 24 2014, 02:24
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(ViKo @ Mar 23 2014, 10:57) *
...чтобы не включать всю кучу h-файлов во все c-файлы, собрал их в одну кучу в main.h....


у компиляторов порой встречается глюк - не чуствительность к изменениям ашника в ашнике.
ну это так...к слову..

а если по теме:
в общий ашник скидывают то, что точно не будет правиться. Ну например файлы объявлений стандартной библиотеки.
Или скажем внешней библиотеки третьих лиц.
Например если взять любой пример от ST то заголовочные файлы включаются в один общий.
Только не забывайте что код в ввиде библиотеки педоставленsm.gif

по поводу консерватории - где и как объявлять глобальные переменные. Так это же вопрос консерватории а не инструмента. Пишите Вы хоть
на си или си плас плас или джаве - фиолетов, это вторично(язык описания). первично логика - кто и как должен видеть, иметь доступ,
править, читать, атомарность доступа, шаринг, время жизни и т.д... аспектов много...
Например:
взять те же самые библиотеки. Удобно писать экспорт-импорт внутри одного ашника. И в зависимости от условия компиляции
объявлять везде что это внешняя переменная либо своя(если внутри либы). При этом объявление носит уникальность записи и исключает двойную
или более трактовку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Проект из многих файлов на C   Mar 23 2014, 06:57
- - aaarrr   Цитата(ViKo @ Mar 23 2014, 10:57) Не слиш...   Mar 23 2014, 08:12
|- - ViKo   Цитата(aaarrr @ Mar 23 2014, 11:12) Это п...   Mar 23 2014, 08:22
|- - aaarrr   Цитата(ViKo @ Mar 23 2014, 12:22) Реально...   Mar 23 2014, 08:52
|- - ViKo   Цитата(aaarrr @ Mar 23 2014, 11:52) Не ну...   Mar 23 2014, 09:15
- - seneka   Цитата(ViKo @ Mar 23 2014, 10:57) Давно т...   Mar 23 2014, 08:14
- - ViKo   Тут вот какой вопрос - если бы переменная или макр...   Mar 23 2014, 10:18
- - dxp   QUOTE (ViKo @ Mar 23 2014, 13:57) Давно т...   Mar 23 2014, 10:33
|- - ViKo   Цитата(dxp @ Mar 23 2014, 13:33) Аналогич...   Mar 23 2014, 10:49
|- - dxp   QUOTE (ViKo @ Mar 23 2014, 17:49) А с-фай...   Mar 24 2014, 02:47
- - AlexandrY   Цитата(ViKo @ Mar 23 2014, 08:57) Не слиш...   Mar 23 2014, 14:43
|- - ViKo   Цитата(AlexandrY @ Mar 23 2014, 17:43) Пр...   Mar 23 2014, 15:10
|- - AlexandrY   Цитата(ViKo @ Mar 23 2014, 17:10) Да, иск...   Mar 23 2014, 15:56
|- - ViKo   Цитата(AlexandrY @ Mar 23 2014, 18:56) Ну...   Mar 23 2014, 16:18
|- - AlexandrY   Цитата(ViKo @ Mar 23 2014, 18:18) SlickEd...   Mar 23 2014, 16:41
|- - _Pasha   Цитата(ViKo @ Mar 23 2014, 19:18) SlickEd...   Mar 24 2014, 05:21
|- - ViKo   Цитата(_Pasha @ Mar 24 2014, 08:21) Попро...   Mar 24 2014, 05:47
|- - halfdoom   Цитата(ViKo @ Mar 24 2014, 08:47) halfdoo...   Mar 24 2014, 07:02
|- - ViKo   Цитата(ViKo @ Mar 24 2014, 08:47) Это всё...   Apr 1 2014, 11:36
- - AnatolyT   Так как до сих пор не делал крупные проекты, типич...   Mar 23 2014, 16:47
- - halfdoom   Цитата(ViKo @ Mar 23 2014, 09:57) Не слиш...   Mar 24 2014, 01:59
- - AnatolyT   Хотел бы добавить к своему сообщению здесь, ничего...   Mar 24 2014, 02:54


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 07:25
Рейтинг@Mail.ru


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