Урок №20. Многофайловые программы

При увеличении размера программ следует разделять их на несколько файлов для удобства и повышения функциональности. Одним из плюсов использования IDE является удобство работы с большим количеством файлов. Мы уже знакомы с процессом создания и компиляции однофайловых проектов, поэтому добавление новых файлов не представляет сложностей.
Многофайловые проекты в Visual Studio
Для добавления нового элемента в Visual Studio следует выполнить следующие действия: откройте "Обозреватель решений", найдите ваш проект, нажмите правой кнопкой мыши на его имени, выберите пункт "Добавить" и затем "Создать элемент...".

Пожалуйста, выберите необходимый тип файла в появившемся диалоговом окне, укажите его название и местоположение, после чего нажмите кнопку "Добавить":
Вы также имеете возможность прикреплять файлы к вашему проекту, перейдя в раздел "Проект" и выбрав опцию "Добавить новый элемент...".
Многофайловые проекты в Code::Blocks
Для создания нового файла в Code::Blocks следует выбрать пункт меню "File" > "New" > "File...".
После этого выберите "исходный код C/C++" и нажмите "Перейти":

После этого может появиться кнопка "Далее" (но это не обязательно):

После этого "C++" и снова "Next" :

После этого необходимо указать название для создаваемого файла (не забудьте добавить расширение .cpp) и выбрать его местоположение (нажмите на значок "..." и выберите путь). Убедитесь, что все три флажка установлены (они отвечают за настройки сборки). После этого нажмите кнопку "Завершить":

Выполнено! Файл успешно загружен.
Многофайловые проекты в GCC/G++
Для создания файла, указания его имени и подключения к компиляции в командной строке необходимо выполнить следующие действия:
Компилируйте файлы main.cpp и add.cpp с помощью g++ и сохраните результат в исполняемом файле под названием main
(где main.cpp и add.cpp - это названия файлов с программным кодом, а main - это название результирующего файла)
Пример многофайловой программы
Давайте изучим следующий код, который включает в себя два файла.
Файл add.cpp:int add ( int x , int y )
{
return x + y ;
}
Файл main.cpp:
#include
int main ( )
{
std :: cout << "The sum of 3 and 4 is: " << add ( 3 , 4 ) << std :: endl ;
return 0 ;
}
Рекомендуется попытаться выполнить данный код. Он не будет скомпилирован, и вы столкнетесь с такой ошибкой:
добавить: не удалось найти идентификатор
Во время компиляции кода, компилятор не имеет информации о функциях, расположенных в других файлах. Это сделано специально для того, чтобы избежать конфликтов имен между функциями и переменными с одинаковыми названиями, но находящимися в разных файлах.
Однако в данной ситуации мы стремимся к тому, чтобы файл main.cpp имел доступ к функции add(), расположенной в файле add.cpp. Для обеспечения доступа main.cpp к функциям add.cpp необходимо использовать предварительное объявление:
#include
int add ( int x , int y ) ; // это нужно для того, чтобы main.cpp знал, что функция add() определена в другом месте
int main ( )
{
std :: cout << "The sum of 3 and 4 is: " << add ( 3 , 4 ) << std :: endl ;
return 0 ;
}
После того, как компилятор обработает файл main.cpp, он будет иметь информацию о функции add(). Попробуйте выполнить этот код еще раз.
Что-то пошло не так!
Существует множество ситуаций, которые могут не задаться, особенно, если вы делаете что-то впервые. Главное — сохранять спокойствие:
Первое правило: Если вам выдается сообщение об ошибке от компилятора, указывающее на то, что функция add() не определена в main(), то, вероятно, вы пропустили шаг с предварительным объявлением функции add() в файле main.cpp.
Второй шаг: Если вы столкнулись с данной проблемой от компилятора:
Ошибка: в функции _main обнаружен неразрешенный внешний символ "int __cdecl add(int,int)" (?add@@YAHHH@Z)
Есть несколько вариантов возможных решений:
a) Вероятно, add.cpp был неправильно добавлен в ваш проект. Если вы используете Visual Studio или Code::Blocks, то вы должете увидеть add.cpp в "Обозревателе решений" в списке файлов вашего проекта или в панели проекта IDE. Если файла нет, то нажмите правой кнопкой мыши на вашем проекте и добавьте файл, как показано выше, затем повторите попытку компиляции вашего проекта.
б) Возможно, вы случайно включили add.cpp в другой проект.
в) Есть вероятность того, что добавленный файл не включен в процесс компиляции или линковки. Нажмите правой кнопкой мыши на названии вашего добавленного файла и выберите "Свойства":

Проверьте, что поле "Исключен из сборки" не заполнено или выбрано значение "Нет":

Третье правило: В main.cpp не рекомендуется добавлять следующий код:
#include "add.cpp"
Если вставить эту строку, компилятор будет включать все содержимое файла add.cpp непосредственно в main.cpp, вместо того чтобы рассматривать их как отдельные файлы.
Тест
Для разделения данной программы на два файла (main.cpp и input.cpp) необходимо поместить функцию main() в main.cpp, а функцию getInteger() в input.cpp.
Не забывайте, что перед использованием функции getInteger() необходимо сначала объявить ее в файле main.cpp.
#include
int getInteger ( )
{
std :: cout << "Enter an integer: " ;
int x ;
std :: cin >> x ;
return x ;
}
int main ( )
{
int x = getInteger ( ) ;
int y = getInteger ( ) ;
std :: cout << x << " + " << y << " is " << x + y << '
' ;
return 0 ;
}
Comments