@EVOSandru6

Как присоединить к h файлу проекта и к cpp проекта файлы из папки,лежащей с ними на одном уровне?

Добрый день, такая задача,

Пользуюсь RAD 2010

Хочу в папке проекта создать папку lib/ и в неё поместить 2 файла:

1-й даже не знаю с каким расширением должен быть, т.к. инклюдится в .h файле , хочу в нем инициализировать все функции

2-й файл - что-то вроде #include "lib/funcRun.cpp" (точно не знаю как подключаться)- вроде так должен называться, инклюдиться должен в конце .cpp файла, в нем все функции будут отрабатываться.

Это первая часть вопроса.

Теперь еще момент.

например, если я инициализировал в .h файле функции:

void myFunc2();
void myFun3();
void myFunc4();


то в новом соответствующем файле мне просто скопировать и вставить туда эти 3 строки или еще что-то в нем писать нужно? Аналогичный вопрос про файл отработок функций.

Помогите пожалуйста разобраться.
  • Вопрос задан
  • 2290 просмотров
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
  1. *.cpp файлы при помощи #include не объединяют
  2. Функции не "инициализируют", а объявляют
  3. Изучите описание того, зачем нужны заголовочные файлы
Ответ написан
Комментировать
GavriKos
@GavriKos
Термин "файл отработок функций" крайне пугающий...

Обычно практика такая. В h-файлах - заголовки функций. Т.е. void myFunc2();. В cpp - реализации. Т.е.
void myFunc2()
{
printf("Hello world");
}

В тех местах где вам надо вызывать myFunc2 просто делаете #include "chtototam.h" (chtototam естественно меняете на путь +имя файла).
Ответ написан
EndUser
@EndUser
В h файлах не выделяется память. То есть выделять можно, но это нехорошо.
В h файлах по возможности не описывается реализация функций и методов. То есть описывать можно, но это нехорошо (разрешено только для inline-функций).

Потому, что дважды включённый заголовник создаст конфликт - попытка дважды выделить память под переменную, дважды реализовать код функции. Сами смотрите - math.h вы можете включить во все c/cpp, которым нужен косинус.

Это значит:
1) в заголовниках не создаются никакие переменные.
2) в заголовниках не кодируются функции.

Остаётся:
1) в заголовниках упоминаются переменные через слово extern
2) в заголовниках упоминаются функции через слово extern.
3) в заголовниках могут описываться классы и в них упоминания методов. extern не обязателен.

Следовательно:
Компилируемая часть проекта, содержащая коды и выделение память под переменные (то есть тупо c/cpp), включается посредством главного файла описывающего проект как таковой. В вашем случае, если я не сильно вру, это bdsproj.
Некомпилируемая (условно назовём так) часть проекта, содержащая упоминания, может не включаться в проект, а вставляться в c/cpp посредством директивы #include.

Итого: заголовники включают только информацию как обращаться с переменной (константой, перечислением), функцией(методом), классом(структурой). Реализует это всё ровно один файл проекта, который тематически с этим связан (косинус реализуется только в math.c). Поэтому любой или все c/cpp вашего проекта может включить заголовник math.h, чтобы знать, как полагается вызывать косинус или ваш собственный класс.

P.S. А вообще, директива #include просто копипастит текст того файла в этот. Вы можете вообще озорным образом извращаться с этой директивой - начать код в одном файле, вставить продолжение из второго, а скобочку закрыть в третьем. И называться они могут superfun.c, superfun22.continuation, fun22super.closingparenthesis. Но зачем? Есть культурные договорённости как грамотно использовать директиву #include.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы