Как добавить файл в проект visual studio
Прежде чем мы сможем написать нашу первую программу, нам нужно научиться создавать новые программы в нашей интегрированной среде разработки (IDE). В этом уроке мы расскажем, как это сделать, а вы скомпилируете и запустите свою первую программу!
Проекты
Чтобы написать программу на C++ внутри IDE, мы обычно начинаем с создания нового проекта (мы покажем вам, как это сделать чуть позже). Проект – это контейнер, в котором хранятся все файлы исходного кода, изображения, файлы данных и т.д., которые необходимы для создания исполняемого файла (или библиотеки, веб-сайта и т.д.), который вы сможете запускать или использовать. Проект также сохраняет различные настройки IDE, компилятора и компоновщика, а также запоминает, где вы остановились, чтобы позже, при повторном открытии проекта состояние IDE можно было восстановить с того места, где вы остановились. Когда вы решите скомпилировать свою программу, все файлы .cpp в проекте будут скомпилированы и слинкованы.
Каждый проект соответствует одной программе. Когда вы будете готовы создать вторую программу, вам нужно будет либо создать новый проект, либо перезаписать код в существующем проекте (если вы не хотите его оставлять). Файлы проекта обычно специфичны для конкретной IDE, поэтому проект, созданный в одной IDE, необходимо будет заново создать в другой IDE.
Лучшая практика
Создавайте новый проект для каждой новой программы, которую вы пишете.
Консольные проекты
Когда вы создаете новый проект, вас обычно спрашивают, проект какого типа вы хотите создать. Все проекты, которые мы создадим в этом руководстве, будут консольными. Консольный проект означает, что мы собираемся создавать программы, которые можно запускать из консоли Windows, Linux или Mac.
Ниже показан скриншот консоли Windows:
Рисунок 1 – Консоль Windows
По умолчанию консольные приложения не имеют графического пользовательского интерфейса (GUI), они выводят текст на консоль, считывают ввод с клавиатуры и компилируются в автономные исполняемые файлы. Они идеально подходят для изучения C++, поскольку сводят сложность к минимуму и обеспечивают работу в самых разных системах.
Не беспокойтесь, если вы никогда раньше не пользовались консолью или не знаете, как получить к ней доступ. Мы будем компилировать и запускать наши программы через наши IDE (которые при необходимости будут вызывать консоль).
Рабочие пространства / решения
Когда вы создаете новый проект для своей программы, многие IDE автоматически добавляют ваш проект в «рабочее пространство» («workspace» или «solution») (термин зависит от IDE). Рабочее пространство – это контейнер, который может содержать один или несколько связанных проектов. Например, если вы пишете игру и хотите иметь отдельные исполняемые файлы для одиночной и многопользовательской игры, вам нужно будет создать два проекта. Обоим этим проектам не имело бы смысла быть полностью независимыми – в конце концов, они являются частью одной игры. Скорее всего, каждый из них будет настроен как отдельный проект в рамках одного рабочего пространства.
Хотя вы можете добавить несколько проектов в одно рабочее пространство, мы обычно рекомендуем создавать новое рабочее пространство для каждой программы, особенно во время обучения. Это проще, и вероятность того, что что-то пойдет не так, меньше.
Написание вашей первой программы
Традиционно у программистов, пишущих на новом языке, первой программой является печально известная программа hello world, и мы не собираемся лишать вас этого опыта! Вы нас потом поблагодарите. Может быть.
Создание проекта в Visual Studio 2019
Когда вы запустите Visual Studio 2019, вы должны увидеть диалоговое окно, которое выглядит следующим образом:
Рисунок 2 – Диалоговое окно «Начало работы» Visual Studio 2019
Выберите Создание проекта (Create a new project).
После этого вы увидите диалоговое окно, которое выглядит следующим образом:
Рисунок 3 – Visual Studio 2019: диалоговое окно создания нового проекта
Если вы уже открыли предыдущий проект, вы можете открыть это диалоговое окно через меню Файл (File) → Создать (New) → Проект (Project).
Выберите Мастер классических приложений Windows (Windows Desktop Wizard) и нажмите Далее (Next). Если вы этого не видите, то вы, вероятно, при установке Visual Studio забыли выбрать установку Desktop development with C++. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).
Далее вы увидите диалоговое окно, которое выглядит следующим образом:
Рисунок 4 – Диалоговое окно настройки нового проекта Visual Studio 2019
Замените существующее имя проекта на HelloWorld .
Рекомендуется также установить флажок «Поместить решение и проект в одном каталоге» (Place solution and project in the same directory), поскольку это сокращает количество подкаталогов, создаваемых с каждым проектом.
Нажмите Создать (Create), чтобы продолжить.
Наконец, вы увидите последнее диалоговое окно:
Рисунок 5 – Диалоговое окно параметров проекта Visual Studio 2019
Убедитесь, что тип приложения установлен как Консольное приложение (.exe) (Console Application (.exe)), и что параметр Предкомпилированный заголовок (Precompiled Header) не выбран. Затем нажмите ОК.
Вы создали проект! Чтобы продолжить, перейдите в раздел Обозреватель решений Visual Studio ниже.
Создание проекта в Visual Studio 2017 или в более ранней версии
Чтобы создать новый проект в Visual Studio 2017 или более ранней версии, выберите меню Файл (File) → Создать (New) → Проект (Project). Появится диалоговое окно, которое выглядит примерно так:
Рисунок 6 – Диалоговое окно «Новый проект Visual Studio 2017»
Сначала убедитесь, что слева указан Visual C++. Если вы не видите Visual C++, возможно, вы забыли выбрать установку поддержку Desktop development with C++ при установке Visual Studio. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).
Если вы используете Visual Studio 2017 v15.3 или новее, под Visual C++ выберите Windows Desktop, а затем выберите Windows Desktop Wizard в главном окне.
Если вы не видите вариант с Windows Desktop, возможно, вы используете старую версию Visual Studio. Отлично. Вместо этого выберите Win32, а затем Win32 Console Application в главном окне.
Внизу в поле Name введите название своей программы (замените существующее имя на HelloWorld ). В поле Location вы можете при желании выбрать другое место для размещения вашего проекта. Пока подойдет и значение по умолчанию.
Нажмите ОК. Если вы используете старую версию Visual Studio, запустится мастер приложений Win32. Нажмите Next.
На этом этапе вы должны увидеть диалоговое окно мастера, которое выглядит примерно так (более старые версии Visual Studio используют другой стиль, но имеют большинство из тех же параметров):
Рисунок 7 – Мастер создания десктопного приложения Visual Studio 2017
Убедитесь, что вы сняли флажок Предкомпилированный заголовок (Precompiled Header).
Затем нажмите ОК или Finish. Теперь ваш проект создан!
Обозреватель решений Visual Studio
В левой или правой части окна вы должны увидеть окно под названием Обозреватель решений. В этом окне Visual Studio создала для вас решение (решение "HelloWorld"). Внутри него, имя которого выделено жирным шрифтом, находится ваш новый проект ( HelloWorld ). Visual Studio создала для вас в этом проекте ряд файлов, в том числе HelloWorld.cpp (в элементе дерева Исходные файлы (Source Files)). Вы также можете увидеть некоторые другие файлы .cpp или .h, которые пока можете игнорировать.
Рисунок 8 – Начальные окна Visual Studio 2019
В текстовом редакторе вы увидите, что Visual Studio уже открыла HelloWorld.cpp и создала для вас код. Выделите и удалите весь код и введите/скопируйте следующий код в вашу IDE:
Чтобы скомпилировать программу, либо нажмите F7 (если это не сработает, попробуйте Ctrl + Shift + B ), либо перейдите в меню Сборка (Build) → Собрать решение (Build Solution). Если всё пойдет хорошо, вы должны увидеть следующее в окне вывода:
Или, в зависимости от выбранного языка:
Это означает, что ваша компиляция прошла успешно!
Вы забыли отключить предварительно скомпилированные заголовки при создании проекта. Заново создайте свой проект (в соответствии с инструкциями выше) и обязательно отключите предварительно скомпилированные заголовки.
Чтобы запустить скомпилированную программу, нажмите Ctrl + F5 или перейдите в меню Отладка (Debug) и выберите Запуск без отладки (Start Without Debugging). Вы увидите следующее:
Рисунок 9 – Запуск программы
Это результат выполнения вашей программы! Поздравляем, вы скомпилировали и запустили свою первую программу!
Создание проекта в Code::Blocks
Чтобы создать новый проект, перейдите в меню File (Файл) → New (Новый) → Project (Проект). Появится диалоговое окно, которое выглядит следующим образом:
Рисунок 10 – Code::Blocks. Диалоговое окно создания проекта
Выберите Console application (консольное приложение) и нажмите кнопку Go (перейти/создать).
Если вы видите диалоговое окно мастера консольного приложения, нажмите Next (далее), убедитесь, что выбран C++, и снова нажмите Next.
Теперь вам будет предложено назвать ваш проект. Назовите проект HelloWorld . Вы можете сохранить его где угодно. В Windows мы рекомендуем сохранить его в подкаталоге диска C, например C:\CBProjects .
Рисунок 11 – Code::Blocks. Диалогове окно сохранения проекта
Вы можете увидеть другое диалоговое окно с вопросом, какие конфигурации вы хотите включить. Значения по умолчанию здесь подойдут, поэтому выберите Finish.
Теперь ваш новый проект создан.
В левой части экрана вы должны увидеть окно Management (управление) с выбранной вкладкой Projects (проекты). Внутри этого окна вы увидите папку Workspace с вашим проектом HelloWorld внутри:
Рисунок 12 – Code::Blocks. Workspace
Внутри проекта HelloWorld разверните папку Sources (исходники) и дважды щелкните на « main.cpp ». Вы увидите, что для вас уже написана программа hello world!
Замените ее следующим кодом:
Чтобы собрать проект, нажмите Ctrl + F9 или перейдите в меню Build (Сборка) → Build (Сборка). Если всё пойдет хорошо, вы должны увидеть следующее в окне журнала сборки:
Это означает, что компиляция прошла успешно!
Чтобы запустить скомпилированную программу, нажмите Ctrl + F10 или перейдите в меню Build (Сборка) → Run (Запуск). Вы увидите что-то похожее на следующий скриншот:
Рисунок 13 – Запуск программы
Это результат выполнения вашей программы!
Для пользователей Linux
Пользователям Linux до компиляции в Code::Blocks может потребоваться установить дополнительные пакеты. Дополнительные сведения смотрите в инструкциях по установке Code::Blocks в уроке «0.6 – Интегрированная среда разработки (IDE)».
Если вы используете g++ из командной строки
В этом случае создавать проект не нужно. Просто вставьте следующий код в текстовый файл с именем HelloWorld.cpp и сохраните файл:
В командной строке введите:
Это скомпилирует и слинкует HelloWorld.cpp . Чтобы запустить скомпилированную программу, введите:
И вы увидите результат выполнения своей программы.
Если вы используете другие IDE или веб-компилятор
Вам нужно будет самостоятельно выяснить, как сделать следующее:
- создать консольный проект (только для IDE);
- добавить в проект файл .cpp (только для IDE, если он для вас не был создан автоматически);
- вставить в файл следующий код:
- скомпилировать проект;
- запустить проект.
Если компиляция завершилась ошибкой
Во-вторых, посмотрите вопросы и ответы в уроке «0.8 – Несколько распространенных проблем C++», поскольку ваша проблема может быть там освещена.
В-третьих, прочтите комментарии ниже – кто-то мог столкнуться с той же проблемой.
Если ваша программа запускается, но окно мигает и сразу закрывается
Некоторые IDE автоматически не приостанавливают экран консоли после завершения выполнения программы. Ваша программа запускается, но окно вывода закрывается, прежде чем вы сможете просмотреть результаты.
Если это так с вашей IDE, следующие два шага решат вашу проблему:
Во-вторых, добавьте следующий код в конец функции main() (непосредственно перед оператором return ):
Это приведет к тому, что ваша программа будет ждать, пока пользователь нажмет какую-нибудь клавишу, прежде чем продолжить, что даст вам время изучить вывод вашей программы, прежде чем IDE закроет окно консоли.
Другие решения, такие как обычно предлагаемое system("pause") , могут работать только в определенных операционных системах, и их следует избегать.
Ваш антивирус также может блокировать выполнение программы. В таком случае попробуйте временно отключить его и посмотреть, решится ли проблема.
Для пользователей Visual Studio
Visual Studio не будет в конце делать паузу в работе консольного приложения, если оно запускается с отладкой (меню Отладка (Debug) → Начать отладку (Start Debugging)). Если вы хотите, чтобы она сделала паузу, вы можете либо использовать приведенное выше решение с дополнительным кодом, либо запустить свою программу без отладки (меню Отладка (Debug) → Начать отладку (Start Without Debugging)).
Заключение
Поздравляем, вы прошли самую сложную часть этого руководства (установку IDE и компиляцию вашей первой программы)!
Не волнуйтесь, если не понимаете, что делают все строки в программе HelloWorld . Мы рассмотрим и подробно объясним каждую строку в начале следующей главы.
В Visual Studio существующие файлы кода можно перенести в проект C++ с помощью мастера создания проектов из существующих файлов кода. Этот мастер создает проект, использующий систему MSBuild для управления исходными файлами и конфигурацией сборки. Лучше всего она работает с относительно простыми проектами, в которых нет сложных иерархий папок. Мастер недоступен в более старых выпусках Visual Studio Express.
Перенос существующих файлов кода в проект C++ позволяет использовать собственные функции управления проектами MSBuild, встроенные в интегрированную среду разработки. Если вы предпочитаете использовать существующую систему сборки, например файлы makefile NMake, CMake или альтернативные варианты, вместо этого можно использовать функцию "Открыть папку" или средство CMake. Дополнительные сведения см. в статьях Проекты "Открыть папку" в C++ или Проекты CMake в Visual Studio. Оба варианта позволяют использовать возможности интегрированной среды разработки, такие как IntelliSense и Свойства проекта.
Создание проекта C++ из существующего кода
В меню Файл выберите пункт Создать>Проект из существующего кода.
Укажите расположение проекта, каталог исходных файлов и типы файлов, которые мастер импортирует в новый проект. Чтобы продолжить, нажмите кнопку Далее .
Установите флажок Добавить вложенные папки, чтобы файлы кода копировались в проект из всех подкаталогов. Каталоги перечислены в столбце Папка.
— Выберите Добавить, чтобы отобразилось диалоговое окно Добавление файлов в проект из этой папки, чтобы указать каталоги в которых мастер будет искать существующие файлы кода.
— Выберите Удалить, чтобы удалить путь к каталогу, выбранный в списке.
Укажите настройки проекта, например, среду сборки и ее параметры, соответствующие конкретному типу нового проекта. Чтобы продолжить, нажмите кнопку Далее .
Выберите Тип проекта, чтобы указать тип проекта, создаваемого мастером. Выберите Проект приложения Windows, Проект консольного приложения, Проект библиотеки DLL или Проект статической библиотеки (LIB) .
Установите флажок Добавить поддержку для ATL, чтобы добавить ее в новый проект.
Установите флажок Добавить поддержку для MFC, чтобы добавить ее в новый проект.
Если установлен флажок Использовать внешнюю систему сборки, интегрированная среда разработки не создает проект, поэтому параметры /D, /I, /FI, /AI и /FU для компиляции не требуются. Однако эти параметры должны быть заданы правильно для надлежащей работы IntelliSense.
Задайте нужные параметры отладочной конфигурации. Чтобы продолжить, нажмите кнопку Далее .
Команды Создать, Перестроить, Очистить и параметры Выходные данные (для отладки) включены, только если на странице Указание параметров проекта задан параметр Использовать внешнюю систему сборки.
Здесь вы можете установить флажок Совпадает с конфигурацией отладки: он укажет, что мастер будет создавать параметры для конфигурации выпуска, аналогичные параметрам проекта для конфигурации отладки. Этот параметр выбран по умолчанию. Пока этот флажок установлен, все остальные параметры на этой странице неактивны.
Visual Studio можно использовать для создания стандартных программ на языке C++. Выполнив действия, описанные в этом пошаговом руководстве, можно создать проект, добавить новый файл в проект, изменить файл для добавления кода C++, а затем скомпилировать и запустить программу с помощью Visual Studio.
Можно ввести собственную программу на языке C++ или использовать один из примеров программ. Примером программы в этом пошаговом руководстве является консольное приложение. Это приложение использует set контейнер в стандартной библиотеке C++.
Если требуется соответствие определенной версии стандарта языка C++ (например, C++ 14, C++ 17 или C++ 20), используйте /std:c++14 параметр компилятора, /std:c++17 или /std:c++20 . (Visual Studio 2017 и более поздних версий.)
Предварительные требования
Для выполнения этого пошагового руководства читатель должен владеть основами языка C++.
Создание проекта и Добавление исходного файла
Приведенные ниже инструкции немного отличаются в зависимости от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Создание проекта C++ в Visual Studio
В главном меню выберите Файл >Создать >Проект, чтобы открыть диалоговое окно Создание проекта.
В верхней части диалогового окна задайте для параметра Язык значение C++, для параметра Платформа значение Windows, а для Типа проекта — Консоль.
В отфильтрованном списке типов проектов щелкните Консольное приложение, а затем нажмите кнопку Далее. На следующей странице введите имя проекта и при необходимости укажите расположение проекта.
создание проекта C++ в Visual Studio 2017
Создайте проект, наведя указатель на пункт создать в меню файл и выбрав пункт Project.
на панели типы проектов Visual C++ щелкните Windows рабочий стол, а затем выберите Windows консольное приложение.
Введите имя проекта. По умолчанию решение, содержащее проект, имеет то же имя, что и проект, но можно ввести другое имя. Можно также ввести другое расположение для проекта.
создание проекта C++ в Visual Studio 2015
Создайте проект, наведя указатель на пункт создать в меню файл и выбрав пункт Project.
на панели типы проектов Visual C++ щелкните Windows рабочий стол, а затем выберите Windows консольное приложение.
в диалоговом окне создание Project разверните узел установленные>шаблоны>Visual C++, а затем выберите Win32. В центральной области выберите Консольное приложение Win32.
Введите имя проекта. По умолчанию решение, содержащее проект, имеет то же имя, что и проект, но можно ввести другое имя. Можно также ввести другое расположение для проекта.
Завершите работу мастера приложений Win32.
Добавить новый исходный файл
если Обозреватель решений не отображается, в меню вид выберите пункт Обозреватель решений.
Добавьте в проект новый исходный файл, как показано ниже.
в Обозреватель решенийщелкните правой кнопкой мыши папку исходные файлы , наведите указатель на пункт добавитьи выберите пункт новый элемент.
В узле код щелкните файл C++ (. cpp), введите имя файла и нажмите кнопку добавить.
cpp-файл появится в папке исходные файлы в Обозреватель решений, а файл откроется в редакторе Visual Studio.
В файле в редакторе введите допустимую программу на языке C++, которая использует стандартную библиотеку C++, или скопируйте один из примеров программ и вставьте его в файл.
В меню Сборка выберите Построить решение.
В меню Отладка выберите команду Запуск без отладки.
Если использовался пример программы, откроется окно командной строки, в котором будет указано, найдены ли в наборе определенные целые числа.
Параметры вложения файлов
Доступные параметры для ненастраиваемого вложения файлов приведены ниже.
Выключить: этот параметр создает неструктурированный список файлов без вложения.
По умолчанию: этот параметр применяет поведение вложения файлов по умолчанию в обозревателе решений. Если параметры не существуют для данного типа проекта, вложение файлов в проекте не выполняется. Если параметры существуют (например, для веб-проекта), вложение применяется.
Интернет: этот параметр применяет поведение вложения файлов Интернет ко всем проектам текущего решения. Он включает различные правила: мы рекомендуем вам ознакомиться с ними и сообщить нам свое мнение. На следующем снимке экрана выделены лишь некоторые примеры поведения вложения файлов в рамках этого параметра:
Настройка вложения файлов
Если вас не устраивают готовые правила, вы можете создать собственные, пользовательские параметры вложения, определяющие порядок вложения файлов в обозревателе решений. Можно добавить любое количество пользовательских параметров вложения и переключаться между ними по мере необходимости. Чтобы создать новый пользовательский параметр, можно начать с пустого файла или воспользоваться параметрами Интернет в качестве отправной точки:
Мы рекомендуем использовать параметры Интернет в качестве отправной точки, так как гораздо проще работать с чем-то, что уже функционирует. Если вы используете параметры Интернет в качестве отправной точки, FILENESTING.JSON-файл имеет примерно следующий вид:
Обратим внимание на узел dependentFileProviders и его дочерние узлы. Каждый дочерний узел — это тип правила, который Visual Studio может использовать для вложения файлов. Например, с тем же именем файла, но разными расширениями — это один тип правила. Ниже приведены доступные правила.
extensionToExtension: этот тип правила используется для вложения file.js в file.ts.
fileSuffixToExtension: этот тип правила используется для вложения file-vsdoc.js в file.js.
addedExtension: этот тип правила используется для вложения file.html.css в file.html.
pathSegment: этот тип правила используется для вложения jquery.min.js в jquery.js
allExtensions: этот тип правила используется для вложения file.* в file.js.
fileToFile: этот тип правила используется для вложения bower.json в .bowerrc.
Поставщик extensionToExtension
Этот поставщик позволяет определить правила вложения файлов на основе определенных расширений файлов. Рассмотрим следующий пример.
Файл cart.js вложен в cart.ts из-за первого правила extensionToExtension.
Файл cart.js не вложен в cart.tsx, так как .ts предшествует .tsx в правилах, и может существовать только один родительский элемент.
Файл light.css вложен в light.sass из-за второго правила extensionToExtension.
Файл home.html вложен в home.md из-за третьего правила extensionToExtension.
Поставщик fileSuffixToExtension
Этот поставщик работает так же, как поставщик extensionToExtension. Единственное отличие заключается в том, что правило отслеживает суффикс файла, а не только расширение. Рассмотрим следующий пример.
Файл portal-vsdoc.js вложен в portal.js из-за правила fileSuffixToExtension.
каждый аспект правила работает так же, как extensionToExtension
Поставщик addedExtension
Этот поставщик выполняет вложение файлов с дополнительным расширением в файл без дополнительного расширения. Дополнительное расширение может использоваться только в конце полного имени файла.
Рассмотрим следующий пример.
- Файл file.html.css вложен в file.html из-за правила addedExtension.
Вам не нужно указывать расширения файлов для правила addedExtension — оно автоматически применяется ко всем расширениям. То есть любой файл с таким же именем и расширением, что и другой файл, но с дополнительным расширением, будет вложен в другой файл. Вы не можете ограничить действия поставщика только определенными расширениями файлов.
Поставщик pathSegment
Этот поставщик выполняет вложение файлов с дополнительным расширением в файл без дополнительного расширения. Дополнительное расширение может использоваться только в середине полного имени файла.
Рассмотрим следующий пример.
- Файл jquery.min.js вложен в jquery.js из-за правила pathSegment.
Если вы не указали определенные расширения файлов для правила pathSegment , оно применяется ко всем расширениям. То есть любой файл с таким же именем и расширением, что и другой файл, но с дополнительным расширением в середине, будет вложен в другой файл.
Вы можете ограничить действие правила pathSegment определенными расширениями файлов, указав их следующим образом:
Поставщик allExtensions
Этот поставщик позволяет определить правила вложения файлов для файлов с любым расширением, но одним и тем же базовым именем. Рассмотрим следующий пример.
- Файлы template.cs и template.doc вложены в template.tt из-за правила allExtensions.
Поставщик fileToFile
Этот поставщик позволяет определить правила вложения файлов на основе полных имен файлов. Рассмотрим следующий пример.
- Файл .bowerrc вложен в bower.json из-за правила fileToFile.
Порядок правил
Порядок важен в каждой части пользовательского файла параметров. Вы можете изменить порядок, в котором выполняются правила, перемещая их вверх или вниз в узле dependentFileProvider. Например, если у вас есть одно правило, которое делает file.js родителем file.ts, и еще одно правило, которое делает file.coffee родителем file.ts, порядок, в котором они отображаются в файле, определяет поведение вложения при наличии всех трех файлов. Поскольку file.ts может иметь только один родительский элемент, им становится тот файл, правило которого выполняется первым.
Порядок также важен для самих разделов правила, а не только для файлов в разделе. Как только обнаруживается соответствие пары файлов правилу вложения, другие правила ниже по иерархии пропускаются и обрабатывается следующая пара файлов.
Кнопка вложения файлов
Всеми параметрами, включая ваши собственные, можно управлять с помощью одной кнопки в обозревателе решений:
Создание параметров для определенного проекта
Вы можете создать параметры для конкретного решения и проекта с помощью контекстного меню решения или проекта:
Параметры для конкретного решения и проекта объединяются с активными параметрами Visual Studio. Например, у вас может быть пустой файл параметров для конкретного проекта, однако обозреватель решений по-прежнему будет применять вложение файлов. Поведение вложения определяется параметрами для конкретного решения или параметрами Visual Studio. Очередность объединения параметров вложения файлов: Visual Studio > решение > проект.
Кроме того, можно, напротив, указать Visual Studio на необходимость использования только параметров для конкретного решения или проекта, задав для корневого узла значение true. Visual Studio прекратит объединение файлов параметров на этом уровне и не будет сочетать их с файлами выше по иерархии.
Параметры для конкретного решения и проекта можно зарегистрировать в системе управления версиями, и вся команда, работающая с базой кода, может использовать их совместно.
Отключение правил вложения файлов для проекта
Существующие глобальные правила вложения файлов для конкретных решений или проектов можно отключить с помощью действия удаления для поставщика, вместо действия добавления. Например, если добавить следующий код параметров в проект, все правила pathSegment, которые могут существовать глобально для этого проекта, будут отключены:
По мере того, как программы становятся больше, в целях организации или повторного использования их обычно разделяют на несколько файлов. Одним из преимуществ работы с IDE является то, что они значительно упрощают работу с несколькими файлами. Вы уже знаете, как создавать и компилировать однофайловые проекты. Добавить новые файлы в существующие проекты очень просто.
Лучшая практика
Когда вы добавляете в проект новые файлы исходного кода, давайте им расширение .cpp .
Для пользователей Visual Studio
В Visual Studio кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Создать элемент… (New Item…).
Рисунок 1 – Добавление нового файла в проект в Visual Studio
Убедитесь, что у вас выбран Файл C++ (.cpp). Дайте новому файлу имя, и он будет добавлен в ваш проект.
Рисунок 2 – Создание нового файла в проекте в Visual Studio
Примечание. Если вы создаете новый файл из меню Файл (File), а не из своего проекта в обозревателе решений, новый файл не будет добавлен в ваш проект автоматически. Вам придется добавить его в проект вручную. Для этого кликните правой кнопкой мыши на папке Исходные файлы (Source Files) в окне Обозревателя решений (Solution Explorer) и выберите Добавить (Add) → Существующий элемент (Existing Item), а затем выберите свой файл.
Теперь, когда вы компилируете свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла при компиляции.
Для пользователей Code::Blocks
В Code::Blocks перейдите в меню File (Файл) и выберите New (Создать) → File… (Файл…).
Рисунок 3 – Создание нового файла в Code::Blocks
В диалоговом окне New from template (Создать из шаблона) выберите C/C++ source (Исходный файл C/C++) и нажмите Go (Перейти).
Рисунок 4 – Создание нового исходного файла C/C++ в Code::Blocks
На этом этапе вы можете увидеть или не увидеть приветствие в диалоговом окне мастера создания исходного файла C/C++. Если да, щелкните Next (Далее).
Рисунок 5 – Диалоговое окно мастера создания исходного файла C/C++
На следующей странице мастера выберите C++ и нажмите Next (Далее).
Рисунок 6 – Выбор языка при создании нового исходного файла в Code::Blocks
Теперь дайте новому файлу имя (не забудьте расширение .cpp ) и выберите все конфигурации сборки. Наконец, выберите Finish (Готово).
Рисунок 7 – Указание имени файла и выбор конфигураций сборки
Теперь, когда вы будете компилировать свою программу, вы должны увидеть, как компилятор перечисляет имя вашего файла по мере компиляции.
Для пользователей GCC/G++
Из командной строки вы можете создать дополнительный файл самостоятельно, используя свой любимый редактор, и дать ему имя. Когда вы компилируете свою программу, вам нужно будет включить в строку компиляции все соответствующие исходные файлы. Например:
где main.cpp и add.cpp – это имена ваших исходных файлов, а main – имя выходного файла.
Пример с несколькими файлами
В уроке «2.6 – Предварительные объявления и определения» мы рассмотрели программу с одним исходным файлом, которая не компилируется:
Когда компилятор достигает вызова функции add в строке 5 в функции main , он не знает, что такое add , потому что мы определили add только в строке 9! Нашим решением было либо переупорядочить функции (поместив сначала add ), либо использовать для add предварительное объявление.
Теперь посмотрим на аналогичную программу из нескольких исходных файлов:
Ваш компилятор может решить сначала скомпилировать либо add.cpp , либо main.cpp . В любом случае main.cpp не скомпилируется, что приведет к той же ошибке компилятора, что и в предыдущем примере:
Причина точно такая же: когда компилятор достигает строки 5 файла main.cpp , он не знает, что такое идентификатор add .
Помните, что компилятор компилирует каждый файл отдельно. Он не знает о содержимом других исходных файлов и не запоминает что-либо, что он видел из ранее скомпилированных исходных файлов. Таким образом, даже если компилятор, возможно, видел определение функции add ранее (если он сначала скомпилировал add.cpp ), он этого не запомнил.
Эта ограниченная видимость и короткая память являются преднамеренными, чтобы файлы могли иметь функции или переменные, у которых одинаковые имена, но которые не конфликтуют друг с другом. В следующем уроке мы рассмотрим пример такого конфликта.
Наши варианты решения здесь такие же, как и раньше: поместить определение функции add перед функцией main или удовлетворить компилятор предварительным объявлением. В этом случае, поскольку функция add находится в другом файле, вариант изменения порядка определений не подходит.
Лучшее решение здесь – использовать предварительное объявление:
main.cpp (с предварительным объявлением):
add.cpp (остается прежним):
Теперь, когда компилятор компилирует main.cpp , он будет знать, что такое идентификатор add , и будет удовлетворен. Линкер соединит вызов функции add в main.cpp с определением функции add в add.cpp .
Используя этот метод, мы можем предоставить файлам доступ к функциям, которые находятся в другом файле.
Попробуйте скомпилировать add.cpp и main.cpp с предварительным объявлением. Если вы получили ошибку линкера, убедитесь, что вы правильно добавили add.cpp в свой проект или строку компиляции.
Что-то пошло не так!
Есть много вещей, которые могут пойти не так, когда вы в первый раз попытаетесь работать с несколькими файлами. Если вы попробовали приведенный выше пример и столкнулись с ошибкой, проверьте следующее:
1. Если вы получаете ошибку компилятора о том, что add не определена в main , вы, вероятно, забыли предварительное объявление для функции add в main.cpp .
2а. … наиболее вероятная причина в том, что add.cpp неправильно добавлен в ваш проект. При компиляции вы должны увидеть в списке компиляции и main.cpp , и add.cpp . Если вы видите только main.cpp , значит add.cpp определенно не компилируется. Если вы используете Visual Studio или Code::Blocks, вы должны увидеть add.cpp в списке в обозревателе решений / на панели проекта в левой части IDE. Если его не видно, кликните на проекте правой кнопкой мыши и добавьте этот файл, а затем попробуйте скомпилировать снова. Если вы компилируете из командной строки, не забудьте включить main.cpp и add.cpp в свою команду компиляции.
2b. … возможно, вы добавили add.cpp не в тот проект.
2c. … возможно, что файл не компилируется или не линкуется. Проверьте свойства файла и убедитесь, что файл настроен для компиляции/линковки. В Code::Blocks компиляция и линковка – это отдельные флажки, которые следует установить. В Visual Studio есть параметр «исключить из сборки» (exclude from build), для которого следует установить значение «нет» или оставить пустым.
Резюме
Когда компилятор компилирует программу из нескольких исходных файлов, он может компилировать эти файлы в любом порядке. Кроме того, он компилирует каждый файл отдельно, не зная, что находится в других файлах.
Мы будем много работать с несколькими файлами, как только перейдем к объектно-ориентированному программированию, поэтому сейчас самое подходящее время, чтобы убедиться, что вы понимаете, как добавлять и компилировать проекты с несколькими файлами.
Напоминание: всякий раз, когда вы создаете новый исходный файл (.cpp), вам нужно будет добавить его в свой проект, чтобы он компилировался.
Небольшой тест
Вопрос 1
Разделите следующую программу на два файла ( main.cpp и input.cpp ). main.cpp должен содержать функцию main , а input.cpp должен содержать функцию getInteger .
Не забывайте, что вам понадобится предварительное объявление в main.cpp для функции getInteger() .
Читайте также: