Как только программы становятся больше, их следует разбивать на несколько файлов (в целях удобства и улучшения функциональности). Одним из преимуществ использования IDE является легкость в работе с n-ным количеством файлов. Мы уже знаем, как создавать и компилировать однофайловые проекты, добавление новых файлов не составит труда.
Многофайловые проекты в Visual Studio
В Visual Studio щелкните правой кнопкой мыши по имени вашего проекта в «Обозревателе решений» , затем «Добавить» > «Создать элемент. » :
Во всплывающем диалоговом окне выберите тип файла, укажите его имя, расположение, а затем нажмите «Добавить» :
Также вы можете добавлять файлы к вашему проекту через «Проект» > «Добавить новый элемент. » :
Многофайловые проекты в Code::Blocks
В Code::Blocks перейдите в «File» > «New» > «File. » :
Затем выберите «C/C++ source» и нажмите «Go» :
Как разбить файл на части программой 7-Zip
Затем «Next» (этого окна может и не быть):
Затем «C++» и опять «Next» :
Затем укажите имя нового файла (не забудьте расширение .cpp) и его расположение (нажмите на троеточие и выберите путь). Убедитесь, что поставлены все три галочки (они отвечают за конфигурации сборки ). Затем нажмите «Finish» :
Готово! Файл добавлен.
Многофайловые проекты в GCC/G++
В командной строке вам нужно будет создать файл, указать его имя и подключить к компиляции, например:
g++ main.cpp add.cpp -o main
(где main.cpp и add.cpp — это имена файлов с кодом, а main — это имя файла-результата)
Пример многофайловой программы
Рассмотрим следующую программу, которая состоит из двух файлов.
int add ( int x , int y )
return x + y ;
Попробуйте запустить эту программу. Она не скомпилируется, вы получите следующую ошибку:
add: идентификатор не найден
При компиляции кода, компилятор не знает о существовании функций, которые находятся в других файлах. Это сделано специально, чтобы функции и переменные с одинаковыми именами, но в разных файлах, не вызывали конфликт имен.
Тем не менее, в данном случае, мы хотим, чтобы main.cpp знал (и использовал) функцию аdd(), которая находится в add.cpp. Для предоставления доступа main.cpp к функциям add.cpp, нам нужно использовать предварительное объявление :
int add ( int x , int y ) ; // это нужно для того, чтобы main.cpp знал, что функция add() определена в другом месте
Теперь, когда компилятор будет компилировать main.cpp, он будет знать, что такое add(). Попробуйте запустить эту программу еще раз.
Что-то пошло не так!
Есть много вещей, которые могут пойти не так, особенно, если вы это делаете в первый раз. Главное — не паниковать:
Пункт №1: Если вы получили ошибку от компилятора, что функция add() не определена в main(), то, скорее всего, вы забыли записать предварительное объявление функции add() в main.cpp.
Как разделить файл на части? Разбиваем большой файл и собираем его обратно
Пункт №2: Если вы получили следующую ошибку от линкера:
то возможных решений есть несколько:
a) Cкорее всего, add.cpp некорректно добавлен в ваш проект. Если вы используете Visual Studio или Code::Blocks, то вы должны увидеть add.cpp в «Обозревателе решений» в списке файлов вашего проекта или в панели проекта IDE. Если добавленного файла нет, то щелкните правой кнопкой мыши по вашему проекту и добавьте файл, как это показано выше, а затем повторите попытку компиляции вашего проекта.
б) Вполне возможно, что вы добавили add.cpp к другому проекту.
в) Вполне возможно, что добавленный файл не подключен к компиляции/линкингу. Щелкните правой кнопкой мыши по имени вашего добавленного файла и выберите «Свойства» :
Источник: dzen.ru
Как разбить программу на файлы
Если программа содержит много кода, то более оптимально было бы разнести отдельные части кода по отдельным файлам. Например, одни функции могут храниться в одном файле исходного кода, другие функции — в другом файле.
Например, определим файл sum.cpp , который будет иметь следующий код:
int sum(int a, int b)
Это функция вычисления суммы чисел.
Добавим еще один файл — , который будет содержать объявление функции sum:
int sum(int, int);
И также определим главный файл, который назовем app.cpp :
#include #include «sum.h» // подключаем файл sum.h int main() < int result < sum(5, 4)>; std::cout #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»:
А при компиляции все файлы автоматически компилируются в один.
Источник: metanit.com
Разделить код на несколько файлов C++
Только маленькие программы удобно хранить в одном файле. Разбиение кода на несколько файлов может упростить разработку и ускорить компиляцию.
Вынос части кода в соседний .cpp файл
Файл можно разделить на несколько частей и положить эти .cpp файлы в одну директорию.
Назовём главный файл, где Вы вызываете main() Main.cpp
Создайте файл Functions.cpp и перенесите туда все функции.
В Main.cpp укажите названия функций, которые вы перенесли и аргументы, которые они принимают.
#include using namespace std; double add(double x, double y); int main()
Создайте новый файл Functions.cpp который будет содержат только функции:
double add( double x, double y)
Header Files
Чтобы не перечислять все функции которые вы хотите использовать в главном файле можно упомянуть их в специальном Header файле с расширением .h
Назовём его Functions.h и подключим к главному с помощью директивы #include
#include #include «Functions.h» int main()
Файл Functions.h
#pragma once double add(double x, double y);
нужны, чтобы один и тот же .h файл не подгружался многократно. После первого подключения все остальные попытки буду проигнорированы.
Файл Functions.cpp остаётся без изменений.
Компиляция и запуск
Чтобы скомпилировать проект нужно перечислить все нужные .cpp файлы.
В данном примере это
g++ main.cpp Functions.cpp -o main
./main
Пример с перегрузкой
Добавим функций разного типа, чтобы убедиться в работоспособности кода
Если вы разди эксперимента хотите перегрузить функцию add() ничего в описанном выше подходе менять не нужно.
Просто добавьте перегруженную функцию в Functions.cpp и Functions.h а потом вызовите из main.cpp
Functions.cpp
bool test(bool x) < return x; >bool test(double x) < return x >0; > double add( double x, double y) < return x + y; >double add( double a, double b, double c)
#pragma once double add(double x, double y); double add(double a, double b, double c); bool test(bool x); bool test(double x); void test( int y);
g++ main.cpp Functions.cpp -o main
./main
1.3 + 4.5 is 5.8
1 + 2 + 3 is 6
Если файлов становится много — бывает полезно создать Makefile
Подробнее читайте в статьях
Источник: www.andreyolegovich.ru