Разделение программы на файлы
Если программа содержит много кода, то более оптимально было бы разнести отдельные части кода по отдельным файлам. Например, одни функции могут храниться в одном файле исходного кода, другие функции - в другом файле.
Например, определим файл factorial.cpp, который будет иметь следующий код:
1
2
3
4
5
6
int factorial(int n)
{
if (n > 1)
return n * factorial(n - 1);
return 1;
}
Это функция вычисления факториала.
Добавим еще один файл factorial.h, который будет содержать объявление функции factorial:
1
int factorial(int);
И также определим главный файл, который назовем app.cpp:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "factorial.h"
int main()
{
int result = factorial(5);
std::cout << "result = " << result << std::endl;
return 0;
}
Функция main вызывает функцию factorial для вычислеия факториала числа. Но чтобы использовать функцию, определенную в другом файле, необходимо добавить ее объявление. В прошлых темах объявление функции добавлялось непосредственно в главный и единственный файл программы. Однако если функции определены в отдельных файлах, то более оптимально помещать объявления функций в специальные заголовочные файлы и потом подключать эти файлы. Именно поэтому в начале с помощью директивы include подключается файл factorial.h, который содержит объявление или заголовок функции. Файл factorial.h еще называется заголовочным файлом (header file).
Можно было бы и не подключать файл factorial.h и вообще не создавать его, а объявление функции поместить непосредственно в файл app.cpp. Но при изменении функции может потребоваться изменить и ее объявление. И если функция factorial используется в нескольких файлах с исходным кодом, то в каждом из этих файлов придется менять ее объявление. В данном же случае достаточно изменить объявление функции в одном файле - factorial.h.
header files in c++
При компиляции в Visual Studio все файлы автоматически компилируются в один. При компиляции через g++ необходимо передать все файлы через пробел компилятору:
g++ app.cpp factorial.cpp -o app
На выходе будет сгенерирован единый файл app.