Использование заголовочных файлов в С++

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

В С++ прототипы функций обычно помещаются в отдельный файл, который называют включаемым (подключаемым) или заголовочным (потому что там обычно хранятся “заголовки” функций и некоторые глобальные объявления). Если в вашей программе необходимо использовать функции, объявленные в этом файле, то вам надо подключить этот файл в исходном файле вашей программы.

При компиляции препроцессор С++, который выполняется ДО этапа компиляции, вставляет содержимое заголовочного файла в то место исходного кода, где встречает директиву #include:

#include "ИмяФайла"

Директива #include требует от препроцессора заменить её исходным кодом файла, который указан в директиве.

Директивы, хотя и являются частью языка программирования, не являются частью программы, то есть они не управляют ходом выполнения программы, а, значит, и не дают никакие команды процессору компьютера (директивы управляют препроцессором - программой, которая может быть отдельной или быть частью компилятора). Поэтому они отличаются от инструкций языка.

Директива должна размещаться в одной строке. И строка полностью отдаётся директиве (то есть в одной строке не может быть более одной директивы). Директива начинается с символа #.

Так сложилось исторически, что заголовочные файлы в С/С++ имеют расширение .h (первая буква слова header - заголовок). И программисты старой школы (то есть такие старпёры, как я))) упорно придерживаются этого правила (традиции - наше всё!). Хотя это необязательно, и это условие уже давно отменено стандартом С++.

Также советую пройти по ссылкам в тексте, указанным выше. Там вы можете больше узнать о директивах и препроцессоре. Ну а сейчас пример.

Допустим, у нас есть файл, где определены какие-то функции (в примере только одна). Дадим этому файл имя modul.cpp. Его содержимое:

int mySum(int x, int y)
{
return(x + y);
}

Создадим заголовочный файл modul.h, в котором будет такой код:

//Подключаем файл modul.cpp с определениями функций
#include "modul.cpp"
//Объявление прототипов функций из файла modul.cpp
int mySum(int x, int y);

То есть мы создали два файла. В первом - определения функций, а во втором - их объявления (прототипы). Это как бы и не совсем логично, когда речь идёт о нескольких функциях. Но если функций десятки, да ещё определены они в разных файлах, то имеет смысл сделать один заголовочный файл для прототипов функций из разных файлов (или даже из одного, если их там очень много).

Ну и теперь можно подключить заголовочный файл к нашей программе и использовать его функции (ну и не только функции, там могут быть константы, например).

Вопрос не очень сложный. Но, как я уже много раз говорил, поскольку этот канал, в основном, для начинающих, то и вопросы здесь рассматриваются несложные.

Разумеется, не стоит так заморачиваться ради 1-2 функций. Но если программа большая, и содержит кучу констант, функций, классов и т.п., то всё это имеет смысл раскидать по разным файлам, а в основной программе оставить только самое необходимое. Тогда это будет выглядеть более осмысленно и понятно.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.