Если программа содержит много кода, то более оптимально было бы разнести отдельные части кода по отдельным файлам. Например, одни функции могут храниться в одном файле исходного кода, другие функции - в другом файле.
Например, определим файл sum.cpp, который будет иметь следующий код:
int sum(int a, int b) { return a + b; }
Это функция вычисления суммы чисел.
Добавим еще один файл - sum.h, который будет содержать объявление функции sum:
int sum(int, int);
И также определим главный файл, который назовем app.cpp:
#include <iostream> #include "sum.h" // подключаем файл sum.h int main() { int result { sum(5, 4)}; std::cout << "result = " << result << std::endl; // result = 9 }
Функция main вызывает функцию sum для вычисления суммы чисел. Но перед использованием функции она должна быть определена или по крайней мере должен быть известен ее заголовок. В прошлых темах объявление функции добавлялось непосредственно в главный и единственный файл программы. Однако если функции определены в отдельных файлах, то более оптимально помещать объявления функций в специальные заголовочные файлы и потом подключать эти файлы. Именно поэтому в начале с помощью директивы include подключается файл sum.h, который содержит объявление или заголовок функции.
#include "sum.h"
Файл sum.h еще называется заголовочным файлом (header file), так как содержит объявление, заголовок функции. ПРичем в данном случае предполагается что все файлы располагаются в одном каталоге:
Можно было бы и не подключать файл sum.h и вообще не создавать его, а объявление функции поместить непосредственно в файл app.cpp. Но при изменении функции может потребоваться изменить и ее объявление. И если функция sum используется в нескольких файлах с исходным кодом, то в каждом из этих файлов придется менять ее объявление. В данном же случае достаточно изменить объявление функции в одном файле - sum.h.
При компиляции через g++ необходимо передать все файлы через пробел компилятору:
g++ app.cpp sum.cpp -o app
То же самое верно и для компиляции через Clang::
clang++ app.cpp sum.cpp -o app.exe
На выходе будет сгенерирован единый файл app.
При работе в Visual Studio заголовочные файлы обычны помещаются в каталог "Headers":
А при компиляции все файлы автоматически компилируются в один.