Как подключить cpp файл c
Перейти к содержимому

Как подключить cpp файл c

  • автор:

Среды разработки для С

Одной из распространенных сред разработки для программирования на Windows является Visual Studio . В данном случае мы будем использовать бесплатную и полнофункциональную среду Visual Studio 2019 Community, которую можно найти по адресу https://visualstudio.microsoft.com/ru/vs/community/.

После загрузки и запуска установщика Visual Studio в нем необходимо отметить пункт Разработка классических приложений на C++ :

Установка С++ в Visual Studio

Выбрав все необходимые пункты, нажмем ОК для запуска установки. После установки Visual Studio создадим первый проект. Для этого откроем Visual Studio. На стартовом экране выберем тип Empty Project для языка C++:

Первый проект на Си в Visual Studio

На следующем экране в поле для имени проекта дадим проекту имя HelloApp и также можно указать расположение проекта. И затем нажмем на Create для создания проекта.

Первый проект на Си в Visual Studio

После этого Visual Studio создаст пустой проект. Добавим в него текстовый файл для набора исходного кода. Для этого в окне Solution Explorer (Обозреватель решений) нажмем правой кнопкой мыши на узел Source Files и в контекстом меню выберем Add -> New Item. :

Добавление файла на Си в Visual Studio

Затем нам откроется окно для добавления нового элемента:

Добавление исходного файла на Си в Visual Studio

Здесь нам надо выбрать пункт C++ File(.cpp) , а внизу окна укажем для файла имя hello.c . Как правило, исходные файлы на Си имеют расширение .с . Оно указывает, что этот файл содержит исходный код на языке С, и он будет обрабатываться соответствующим компилятором.

Настройка проекта

После добавления файла изменим опции проекта. Для этого перейдем к пункту меню Project -> Properties

Свойства проекта на Си в Visual Studio

В окне свойств проекта в левой части перейдем к секции С/С++ и далее к пункту Advanced :

Установка компилятора для языка Си в VS

В правой части окна для поля Compile As установим значение Compile as C Code (/TC) . Тем самым мы говорим, чтобы по умолчанию исходный код компилировался именно как код С, а не С++.

После установки этого значения нажмем на кнопку «Применить», чтобы новые настройки конфигурации вступили в силу.

Для работы с языком Си может быть полезна еще одна настройка — установка стандарта языка. Перейдем к пункту С/С++ -> Language . Здесь в поле C Language Standard мы можем установить один из доступных стандартов для языка Си, который будет применяться для компиляции:

Настройка стандарта языка Си в Visual Studio

Правда, в данном случае он не играет значения, поэтому оставим для этого параметра настройку по умолчанию.

Определение кода программы

После добавления файла >hello.c проект будет иметь следующую структуру:

Структура проекта на Си в Visual Studio

Вкратце пробежимся по этой структуре. Окно Solution Explorer содержит в решение. В данном случае оно называется HelloApp. Решение может содержать несколько проектов. По умолчанию у нас один проект, который имеет то же имя — HelloApp. В проекте есть ряд узлов:

External Dependencies : отображает файлы, которые используются в файлах исходного кода, но не являются частью проекта

Header Files : предназначена для хранения заголовочных файлов с расширением .h

Resource Files : предназначена для хранения файлов ресурсов, например, изображений

Source Files : хранит файлы с исходным кодом

Теперь определим в файле hello.c простейший код, который будет выводить строку на консоль:

Здесь использован весь тот код, который был рассмотрен в предыдущих темах про компиляцию с помощью GCC.

Теперь запустим программу. Для этого в Visual Studio нажмем на сочетание клавиш Ctrl+F5 или выберем пункт меню Debug -> Start Without Debugging :

Запуск программы на Си в Visual Studio

И в итоге Visual Studio передаст исходный код компилятору, который скомпилирует из кода исполняемый файл exe, который потом будет запущен на выполнение. И мы увидим на запущенной консоли наше сообщение:

Первое приложение на языке программирования Си

Затем в проекте в папке x64/Debug мы можем увидеть скомпилированный файл exe, который мы можем запускать независимо от Visual Studio:

Не могу подключить код из отдельного файла C++

В чем проблема? Ногами не пинать, делаю первые шаги в C++.

у меня для тебя плохие новости. тебя обманули, это не с++. 🙂

если твой «проект» состоит более, чем из одного файла, надо параллельно освоить какую-нибудь систему сборки. Например, GNU Make.

text.cpp Пушкин компилировать будет?

g++ не понял, откуда взять функцию getText(). Нигде не говорится, в каком файле должна быть эта функция, а искать по всем файлам — это неправильный подход. Все необходимые файлы должны указываться при компиляции явно.

Как линкуются .cpp файлы к файлам .h?

Есть file.h, где просто описан класс.
Есть file.cpp, где описана реализация этого класса.

в main.cpp, в main, я создаю объект класса file, предварительно подключив «file.h».
Как он понимает, что реализация в file.cpp?

По логике, я подключаю просто header, где прототипы, а о том, что реализация в cpp, нет никаких данных для файла file.h.

  • Вопрос задан более трёх лет назад
  • 2004 просмотра
  • Facebook
  • Вконтакте
  • Twitter

gbg

Компоновщик ищет не файл с реализацией, а метод (на самом деле, это называется «символ») с соответствующим именем.

Компоновщику передается список объектных файлов, и он во всех них ищет метод с нужной сигнатурой.

Если в двух объектных файлах найдется одинаковый символ, компоновщик будет ругаться. В *.h компоновщик не смотрит.

  • Facebook
  • Вконтакте
  • Twitter

Очень просто: ты подаёшь этот файл компилятору, а всё, что в нём есть, попадает в общее глобальное пространство. После обработки препроцессором всё это выглядит так, будто оно не в нескольких файлах, а в одном.

В итоге, file.h file.cpp main.c становятся как бы одним файлом.

  • Facebook
  • Вконтакте
  • Twitter

Несколько уточню ситуацию. Сначала идёт компиляция всех c/cpp (и не только — что укажешь компилятору) файлов. При компиляции по исходнику проходит препроцессор и на место #include подставляет содержимое подключаемых файлов. Таким образом и main.cpp и file.cpp будут содержать вначале file.h с описанием класса. На выходе для каждой единицы компиляции класса получается объектный файл с скомпилированным кодом, где вместо адресов функций указывается какую функцию надо поставить при линковке (модифицированное компилятором имя функции, отражающее перечень аргументов ф-ции, способ вызова и прочее см. name mangling).

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

При линковке все указанные обьектные файлы, библиотеки (просто контейнер для обьектых файлов) собираются в один исполняемые файл — вот тут уже линкер и находит что из main.obj из некой функции вызывается фйнкция, из file.obj, и подставляет нужный вызов.

По сути .h файлы это сахар, что-бы много раз не писать в каждом компилируемом модуле forward declaration чего либо, и компилятор вообще может ни чего не знать о существовании тех же .h файлов, если препроцессор реализован как отдельная программа (см. больше про C препроцессор).

C++
Компиляция и строительство

Программы, написанные на C ++, должны быть скомпилированы до их запуска. В зависимости от вашей операционной системы доступно большое количество компиляторов.

замечания

Большинство операционных систем поставляются без компилятора, и их необходимо установить позже. Некоторые общие варианты компиляторов:

  • GCC, сборник компиляторов GNUg ++
  • clang: интерфейс семейства языков C для LLVMclang ++
  • MSVC, Microsoft Visual C ++ (входит в состав Visual Studio)visual-c ++
  • C ++ Builder, Embarcadero C ++ Builder (входит в RAD Studio) c ++ builder

Пожалуйста, обратитесь к соответствующему руководству по компиляции, о том, как скомпилировать программу на C ++.

Другой вариант использования конкретного компилятора с его собственной конкретной системой сборки, можно позволить родовым системам сборки настраивать проект для конкретного компилятора или для установленного по умолчанию.

Компиляция с помощью GCC

Предполагая, что один исходный файл с именем main.cpp , команда для компиляции и ссылки на не оптимизированный исполняемый файл выглядит следующим образом (компиляция без оптимизации полезна для начальной разработки и отладки, хотя -Og официально рекомендуется для более новых версий GCC).

Чтобы создать оптимизированный исполняемый файл для использования в производстве, используйте один из опций -O (см .: -O1 , -O2 , -O3 , -Os , -Ofast ):

Если опция -O опущена, -O0, что означает отсутствие оптимизаций, используется по умолчанию (указание -O без номера разрешается на -O1).

Альтернативно, используйте флаги оптимизации из групп O (или более экспериментальных оптимизаций) напрямую. В следующем примере построена оптимизация -O2 плюс один флаг с уровня оптимизации -O3 :

Чтобы создать оптимизированный исполняемый файл для конкретной платформы (для использования на производстве с той же архитектурой), используйте:

Любой из вышеперечисленных файлов создаст двоичный файл, который можно запустить с .\app.exe в Windows и ./app в Linux, Mac OS и т. Д.

Флаг -o также может быть пропущен. В этом случае GCC создаст исполняемый файл a.exe по умолчанию a.exe Windows и a.out в Unix-подобных системах. Чтобы скомпилировать файл без его связывания, используйте параметр -c :

Это создает объектный файл с именем file.o который впоследствии может быть связан с другими файлами для создания двоичного файла:

Подробнее о вариантах оптимизации можно узнать на gcc.gnu.org . Особо следует отметить -Og (оптимизация с упором на опыт отладки — рекомендуется для стандартного цикла редактирования-компиляции-отладки) и -Ofast (все оптимизации, включая те, которые не соответствуют строгому соблюдению стандартов).

Флаг -Wall позволяет предупреждать многие распространенные ошибки и всегда должен использоваться. Для улучшения качества кода часто рекомендуется использовать -Wextra и другие предупреждающие флаги, которые автоматически не активируются -Wall и -Wextra .

Если код ожидает определенный стандарт C ++, укажите, какой стандарт использовать, включая флаг -std= . Поддерживаемые значения соответствуют году завершения для каждой версии стандарта ISO C ++. Начиная с GCC 6.1.0, допустимыми значениями для std= flag являются c++98 / c++03 , c++11 , c++14 и c++17 / c++1z . Значения, разделенные косой чертой, эквивалентны.

GCC включает некоторые расширения, специфичные для компилятора, которые отключены, когда они конфликтуют со стандартом, заданным флагом -std= . Для компиляции с включенными всеми расширениями может использоваться значение gnu++XX , где XX — любой из лет, используемых значениями c++ перечисленными выше.

Стандарт по умолчанию будет использоваться, если ни один не указан. Для версий GCC до 6.1.0 по умолчанию используется значение -std=gnu++03 ; в GCC 6.1.0 и выше по умолчанию используется -std=gnu++14 .

Обратите внимание, что из-за ошибок в GCC флаг -pthread должен присутствовать при компиляции и связывании для GCC для поддержки стандартных функций потоковой -pthread C ++, представленных с C ++ 11, таких как std::thread и std::wait_for . Опущение при использовании функций потоковой передачи может не приводить к появлению предупреждений, но недействительных результатов на некоторых платформах.

Связывание с библиотеками:

Используйте опцию -l для передачи имени библиотеки:

Если библиотека не находится в стандартном пути библиотеки, добавьте путь с параметром -L :

Несколько библиотек могут быть связаны между собой:

Если одна библиотека зависит от другой, поместите зависимую библиотеку перед независимой библиотекой:

Или дайте компоновщику определить само упорядочение через —start-group и —end-group (обратите внимание: это имеет значительную производительность):

Компиляция с помощью Visual C ++ (командной строки)

Для программистов, поступающих из GCC или Clang в Visual Studio, или программистов, более удобных с командной строкой в ​​целом, вы можете использовать компилятор Visual C ++ из командной строки, а также из среды IDE.

Если вы хотите скомпилировать свой код из командной строки в Visual Studio, сначала необходимо настроить среду командной строки. Это можно сделать, открыв Visual Studio Command Prompt / Developer Command Prompt / x86 Native Tools Command Prompt / x64 Native Tools Command Prompt или аналогичная (как предоставляется вашей версией Visual Studio) или в командной строке, путем перехода к подкаталог VC каталога установки компилятора (обычно \Program Files (x86)\Microsoft Visual Studio x\VC , где x — номер версии (например, 10.0 для 2010 или 14.0 для 2015) и запуск командного файла VCVARSALL с помощью параметр командной строки, указанный здесь .

Обратите внимание, что в отличие от GCC, Visual Studio не предоставляет интерфейс для компоновщика ( link.exe ) через компилятор ( cl.exe ), но вместо этого предоставляет компоновщик как отдельную программу, которую компилятор вызывает при выходе. cl.exe и link.exe могут использоваться отдельно с разными файлами и параметрами, иначе cl может передаваться файлы и параметры для link если обе задачи выполняются вместе. Любые параметры привязки, указанные для cl будут переведены в параметры link , и любые файлы, не обработанные cl будут переданы непосредственно в link . Поскольку это в основном простое руководство по компиляции с командной строкой Visual Studio, аргументы для link не будут описаны в настоящее время; если вам нужен список, см. здесь .

Обратите внимание, что аргументы для cl чувствительны к регистру, а аргументы для link — нет.

[Следует иметь в виду, что в некоторых из следующих примеров при указании абсолютных имен пути используется переменная «текущий каталог» оболочки Windows, %cd% . Для тех, кто не знаком с этой переменной, он расширяется до текущего рабочего каталога. Из командной строки это будет каталог, в котором вы были, когда вы запускаете cl , и указывается в командной строке по умолчанию (если ваша командная строка — C:\src> , например, то %cd% — C:\src\ ).]

Предполагая, что в текущей папке имеется один исходный файл с именем main.cpp , команда для компиляции и ссылки на неоптимизированный исполняемый файл (полезный для начальной разработки и отладки) является (используйте любой из следующих):

Предположим, что дополнительный файл-источник «niam.cpp» в том же каталоге использует следующее:

Вы также можете использовать подстановочные знаки, как и следовало ожидать:

Чтобы переименовать или переместить исполняемый файл, выполните одно из следующих действий:

Оба параметра /o и /Fe передают свой параметр (назовем его o-param ), чтобы link как /OUT:o-param , добавив соответствующее расширение (обычно .exe или .dll ) в «имя» o-param s по мере необходимости. Хотя оба /o и /Fe , насколько мне известно, идентичны по функциональности, последний предпочтительнее для Visual Studio. /o отмечен как устаревший и, как представляется, в основном предоставляется программистам, более знакомым с GCC или Clang.

Обратите внимание, что, хотя пространство между /o и указанной папкой и / или именем является необязательным, между /Fe и указанным папок и / или именем не может быть пробела.

Аналогично, для создания оптимизированного исполняемого файла (для использования в производстве) используйте:

Наконец, чтобы создать оптимизированный исполняемый файл для конкретной платформы (для использования на производстве на машине с указанной архитектурой), выберите соответствующую командную строку или параметр VCVARSALL для целевой платформы. link должна обнаружить желаемую платформу из объектных файлов; если нет, используйте параметр /MACHINE чтобы явно указать целевую платформу.

Любое из вышеперечисленного даст исполняемый файл с именем, указанным /o или /Fe , или если ни один из них не указан, с именем, идентичным первому источнику или объекту, указанному компилятору.

Чтобы скомпилировать файл (ы) без ссылки, используйте:

Это говорит cl для выхода без вызова link и создает объектный файл, который позже может быть связан с другими файлами для создания двоичного файла.

Существуют и другие важные параметры командной строки, которые было бы очень полезно для пользователей:

Для тех, кто более знаком с системами * nix и / или GCC / Clang, cl , link и другими инструментами командной строки Visual Studio, могут принимать параметры, указанные с помощью дефиса (например, -c ), вместо косой черты (например, /c ). Кроме того, Windows распознает либо косую черту, либо обратную косую черту как допустимый разделитель путей, поэтому можно использовать также пути в стиле nix. Это упрощает преобразование простых команд компилятора из g++ или clang++ в cl , или наоборот, с минимальными изменениями.

Конечно, при переносе командных строк, которые используют более сложные параметры g++ или clang++ , вам нужно искать эквивалентные команды в применимых документах компилятора и / или на ресурсных сайтах, но это облегчает работу с минимальным временем обучения новые компиляторы.

Если вам нужны специальные языковые функции для вашего кода, требуется определенная версия MSVC. Из Visual C ++ 2015 Update 3 можно выбрать версию стандарта для компиляции с помощью флага /std . Возможные значения: /std:c++14 и /std:c++latest ( /std:c++17 скоро появится).

Примечание. В более старых версиях этого компилятора были доступны специальные флаги функций, однако в основном это использовалось для предварительного просмотра новых функций.

Компиляция с помощью Visual Studio (графический интерфейс) — Hello World

  1. Загрузите и установите Visual Studio Community 2015
  2. Открыть сообщество Visual Studio
  3. Нажмите Файл -> Создать -> Проект введите описание изображения здесь
  4. Нажмите Шаблоны -> Visual C ++ -> Консольное приложение Win32, а затем назовите проект MyFirstProgram . введите описание изображения здесь
  5. Нажмите ОК.
  6. Нажмите «Далее» в следующем окне. введите описание изображения здесь
  7. Проверьте флажок « Empty project и нажмите «Готово»: введите описание изображения здесь
  8. Щелкните правой кнопкой мыши папку Source Source затем -> Добавить -> Новый элемент: введите описание изображения здесь
  9. Выберите файл C ++ и назовите файл main.cpp, затем нажмите «Добавить»: введите описание изображения здесь 10: Скопируйте и вставьте следующий код в новый файл main.cpp:

Вы должны выглядеть так: введите описание изображения здесь

  1. Нажмите «Отладка» -> «Старт без отладки» (или нажмите ctrl + F5):

введите описание изображения здесь

  1. Готово. Вы должны получить следующий вывод консоли: введите описание изображения здесь

Компиляция с Clang

Поскольку front-end Clang предназначен для совместимости с GCC, большинство программ, которые могут быть скомпилированы через GCC, будут скомпилированы, когда вы замените g++ на clang++ в сценариях сборки. Если no -std=version задана, будет использоваться gnu11.

Пользователи Windows, которые используются для MSVC, могут поменять cl.exe на clang-cl.exe . По умолчанию clang пытается быть совместимым с самой высокой версией MSVC, которая была установлена.

В случае компиляции с визуальной студией clang-cl можно использовать, изменив Platform toolset в свойствах проекта.

В обоих случаях clang совместим только с его интерфейсом, хотя он также пытается генерировать двоичные файлы совместимых объектов. Пользователи clang-cl должны заметить, что совместимость с MSVC еще не завершена .

Чтобы использовать clang или clang-cl, можно использовать установку по умолчанию в некоторых дистрибутивах Linux или в комплекте с IDE (например, XCode на Mac). Для других версий этого компилятора или на платформах, для которых это не установлено, это можно загрузить с официальной страницы загрузки .

Если вы используете CMake для создания кода, вы обычно можете переключать компилятор, задав переменные окружения CC и CXX следующим образом:

Компиляторы онлайн

Различные веб-сайты предоставляют онлайн-доступ к компиляторам C ++. Набор функций онлайн-компилятора значительно варьируется от сайта к сайту, но обычно они позволяют сделать следующее:

  • Вставьте свой код в веб-форму в браузере.
  • Выберите некоторые параметры компилятора и скомпилируйте код.
  • Собирать компилятор и / или выпуск программы.

Онлайн-поведение веб-компилятора обычно является довольно ограничительным, поскольку они позволяют кому-либо запускать компиляторы и выполнять произвольный код на своей стороне сервера, тогда как обычно удаленное выполнение произвольного кода считается уязвимостью.

Компиляторы онлайн могут быть полезны для следующих целей:

  • Запустите небольшой фрагмент кода с компьютера, на котором отсутствует компилятор C ++ (смартфоны, планшеты и т. Д.).
  • Убедитесь, что код успешно компилируется с разными компиляторами и работает одинаково, независимо от компилятора, с которым он был скомпилирован.
  • Изучайте или преподавайте основы C ++.
  • Изучите современные возможности C ++ (C ++ 14 и C ++ 17 в ближайшем будущем), когда современный компилятор C ++ недоступен на локальной машине.
  • Найдите ошибку в своем компиляторе по сравнению с большим набором других компиляторов. Проверьте, исправлена ​​ли ошибка компилятора в будущих версиях, которые недоступны на вашем компьютере.
  • Решите проблемы онлайн-судьи.

Какие онлайн-компиляторы не должны использоваться для:

  • Разработка полнофункциональных (даже небольших) приложений с использованием C ++. Обычно онлайн-компиляторы не позволяют связываться со сторонними библиотеками или загружать артефакты сборки.
  • Выполнять интенсивные вычисления. Ресурсы на стороне Sever ограничены, поэтому любая пользовательская программа будет убита через несколько секунд после ее выполнения. Допустимое время выполнения обычно достаточно для тестирования и обучения.
  • Сам сервер компилятора атаки или сторонние хосты в сети.

Отказ от ответственности: автор (ы) документации не связаны ни с какими ресурсами, перечисленными ниже. Веб-сайты перечислены в алфавитном порядке.

  • http://codepad.org/ Онлайн-компилятор с совместным использованием кода. Редактирование кода после компиляции с предупреждением или ошибкой исходного кода работает не так хорошо.
  • http://coliru.stacked-crooked.com/ Онлайн-компилятор, для которого вы указываете командную строку. Предоставляет компиляторы GCC и Clang для использования.
  • http://cpp.sh/ — Онлайн-компилятор с поддержкой C ++ 14. Не позволяет редактировать командную строку компилятора, но некоторые параметры доступны через элементы управления графическим интерфейсом.
  • https://gcc.godbolt.org/ — Предоставляет широкий список версий, архитектуры и разборки компилятора. Очень полезно, когда вам нужно проверить, что ваш код компилируется разными компиляторами. GCC, Clang, MSVC ( CL ), компилятор Intel ( icc ), ELLCC и Zapcc, причем один или несколько из этих компиляторов доступны для ARM, ARMv8 (как ARM64), Atmel AVR, MIPS, MIPS64, MSP430, PowerPC , x86 и x64 architecutres. Аргументы командной строки компилятора могут быть отредактированы.
  • https://ideone.com/ — Широко используется в сети для иллюстрации поведения фрагмента кода. Предоставляет GCC и Clang для использования, но не позволяет редактировать командную строку компилятора.
  • http://melpon.org/wandbox — Поддерживает многочисленные версии компилятора Clang и GNU / GCC.
  • http://onlinegdb.com/ — крайне минималистичная среда разработки, включающая редактор, компилятор (gcc) и отладчик (gdb).
  • http://rextester.com/ — Предоставляет компиляторы Clang, GCC и Visual Studio для C и C ++ (наряду с компиляторами для других языков), с доступной для использования библиотекой Boost.
  • http://tutorialspoint.com/compile_cpp11_online.php — полнофункциональная оболочка UNIX с GCC и удобный для пользователя проект.
  • http://webcompiler.cloudapp.net/ — Компилятор Online Visual Studio 2015, предоставленный Microsoft в составе RiSE4fun.

Процесс компиляции C ++

Когда вы разрабатываете программу на C ++, следующим шагом является компиляция программы перед ее запуском. Компиляция — это процесс, который преобразует программу, написанную на удобочитаемом языке, такую ​​как C, C ++ и т. Д., В машинный код, который прямо понимается Центральным процессором. Например, если у вас есть исходный код C ++ с именем prog.cpp, и вы выполняете команду компиляции,

Существует четыре основных этапа, связанных с созданием исполняемого файла из исходного файла.

Препроцессор C ++ принимает файл исходного кода C ++ и обрабатывает заголовки (#include), макросы (#define) и другие директивы препроцессора.

Расширенный исходный код C ++, созданный препроцессором C ++, скомпилирован на язык ассемблера для платформы.

Код ассемблера, сгенерированный компилятором, собран в код объекта для платформы.

Файл объектного кода, созданный ассемблером, связан вместе
с объектными кодами для любых библиотечных функций, используемых для создания библиотеки или исполняемого файла.

предварительная обработка

Препроцессор обрабатывает директивы препроцессора, такие как #include и #define. Это агностик синтаксиса C ++, поэтому его следует использовать с осторожностью.

Он работает в одном исходном файле C ++ за раз, заменяя директивы #include содержимым соответствующих файлов (обычно это просто объявления), выполняет замену макросов (#define) и выбирает разные части текста в зависимости от #if, #ifdef и #ifndef.

Препроцессор работает над потоком токенов предварительной обработки. Макрозамена определяется как замена токенов другими токенами (оператор ## позволяет слить два токена, когда это имеет смысл).

После этого препроцессор создает один вывод, который представляет собой поток токенов, полученный в результате описанных выше преобразований. Он также добавляет некоторые специальные маркеры, которые сообщают компилятору, откуда появилась каждая строка, чтобы он мог использовать их для создания разумных сообщений об ошибках.

На этом этапе могут быть сделаны некоторые ошибки с умным использованием директив #if и #error.

Используя ниже флаг компилятора, мы можем остановить процесс на этапе предварительной обработки.

компиляция

Шаг компиляции выполняется на каждом выходе препроцессора. Компилятор анализирует чистый исходный код C ++ (теперь без каких-либо предпроцессорных директив) и преобразует его в код сборки. Затем вызывает базовый сервер (ассемблер в toolchain), который собирает этот код в машинный код, производящий фактический двоичный файл в некотором формате (ELF, COFF, a.out, . ). Этот объектный файл содержит скомпилированный код (в двоичной форме) символов, определенных на входе. Символы в объектных файлах называются по имени.

Файлы объектов могут ссылаться на символы, которые не определены. Это тот случай, когда вы используете декларацию и не предоставляете определение для нее. Компилятор не возражает против этого и будет с удовольствием создавать объектный файл до тех пор, пока исходный код будет правильно сформирован.

Компиляторы обычно позволяют прекратить компиляцию на этом этапе. Это очень полезно, потому что с ним вы можете скомпилировать каждый исходный код отдельно. Преимущество этого заключается в том, что вам не нужно перекомпилировать все, если вы меняете только один файл.

Созданные объектные файлы могут быть помещены в специальные архивы, называемые статическими библиотеками, для более легкого повторного использования позже.

На этом этапе сообщается о «регулярных» ошибках компилятора, таких как синтаксические ошибки или ошибки с ошибками при перегрузке.

Чтобы остановить процесс после этапа компиляции, мы можем использовать параметр -S:

монтаж

Ассемблер создает объектный код. В системе UNIX вы можете видеть файлы с суффиксом .o (.OBJ на MSDOS), чтобы указать файлы объектных кодов. На этом этапе ассемблер преобразует эти объектные файлы из кода сборки в инструкции машинного уровня, а созданный файл является перемещаемым объектным кодом. Следовательно, на этапе компиляции создается перемещаемая объектная программа, и эта программа может использоваться в разных местах без повторной компиляции.

Чтобы остановить процесс после шага сборки, вы можете использовать опцию -c:

соединение

Линкером является то, что дает окончательный результат компиляции из файлов объектов, созданных ассемблером. Этот вывод может быть либо общей (или динамической) библиотекой (и, хотя имя похоже, они не имеют много общего со статическими библиотеками, упомянутыми ранее), либо исполняемый файл.

Он связывает все объектные файлы, заменяя ссылки на неопределенные символы правильными адресами. Каждый из этих символов может быть определен в других объектных файлах или в библиотеках. Если они определены в библиотеках, отличных от стандартной библиотеки, вам нужно сообщить об этом компоновщику.

На этом этапе наиболее распространенными ошибками являются отсутствующие определения или дублирующие определения. Первое означает, что либо определения не существуют (т.е. они не написаны), либо что объектные файлы или библиотеки, в которых они находятся, не были предоставлены компоновщику. Последнее очевидно: один и тот же символ был определен в двух разных объектных файлах или библиотеках.

Компиляция с помощью кода :: Блоки (графический интерфейс)

Загрузите и установите Code :: Blocks здесь . Если вы находитесь в Windows, будьте осторожны, чтобы выбрать файл, для которого имя содержит mingw , другие файлы не устанавливают компилятор.

Откройте код :: Блоки и нажмите «Создать новый проект»:

введите описание изображения здесь

Выберите «Консольное приложение» и нажмите «Перейти»:

введите описание изображения здесь

Нажмите «Далее», выберите «C ++», нажмите «Далее», выберите имя для своего проекта и выберите папку для ее сохранения, нажмите «Далее» и затем нажмите «Готово».

Теперь вы можете редактировать и компилировать свой код. Код по умолчанию, который печатает "Hello world!" в консоли уже есть. Чтобы скомпилировать и / или запустить вашу программу, нажмите одну из трех кнопок компиляции / запуска на панели инструментов:

введите описание изображения здесь

Для компиляции без запуска нажмите строить , для запуска без компиляции снова нажмите Бежать и компилировать, а затем запускать, нажмите Сборка и запуск ,

Компиляция и запуск по умолчанию «Hello world!» код дает следующий результат:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *