В результате успешной компиляции текста программы c каким расширением будет получен файл

Обновлено: 02.07.2024

Компиляция программы на языке C — это многоэтапный процесс. На общем уровне процесс можно разделить на четыре отдельных этапа: предварительная обработка, компиляция, сборка и связывание.

В этом посте я рассмотрю каждый из четырех этапов компиляции следующей программы на C:

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

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

Чтобы распечатать результат этапа предварительной обработки, передайте параметр -E в cc :

Учитывая сообщение «Hello, World!» В приведенном выше примере препроцессор создаст содержимое заголовочного файла stdio.h, объединенное с содержимым файла hello_world.c, без начального комментария:

Подборка

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

Существование этого шага позволяет коду C содержать встроенные ассемблерные инструкции и использовать разные ассемблеры.

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

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

Это создаст файл с именем hello_world.s, содержащий сгенерированные инструкции по сборке. В macOS 10.10.4, где cc — это псевдоним для clang , генерируется следующий вывод:

Сборка

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

Чтобы сохранить результат этапа сборки, передайте параметр -c в cc :

Выполнение приведенной выше команды создаст файл с именем hello_world.o, содержащий объектный код программы. Содержимое этого файла имеет двоичный формат и может быть проверено с помощью hexdump или od, выполнив одну из следующих команд:

Связывание

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

Компоновщик упорядочит части объектного кода так, чтобы функции в одних частях могли успешно вызывать функции в других. Также будут добавлены части, содержащие инструкции для библиотечных функций, используемых программой. В случае «Hello, World!» программа, компоновщик добавит объектный код для функции puts.

Результатом этого этапа является окончательная исполняемая программа. При запуске без параметров cc назовет этот файл a.out . Чтобы назвать файл по-другому, передайте параметр -o в cc :

Хотите поработать со мной, задать вопрос или просто поздороваться? Напишите мне в Твиттере или напишите мне по электронной почте!

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

Обработка файлов в C относится к задаче хранения данных в форме ввода или вывода, созданных при выполнении программ C в файлах данных, а именно в текстовом файле или двоичном файле для дальнейшего использования и анализа.

В этом руководстве по обработке файлов в C мы обсудим:

Обработка файлов в C Tutorial

Прежде чем мы начнем, давайте признаем важность обработки файлов.

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

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

1. Что такое обработка файлов в C?

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

Прежде чем двигаться дальше, вы должны знать, что такое стандартные библиотечные функции в C?

Будьте в курсе последних технологических тенденций
Присоединяйтесь к DataFlair в Telegram!!

2. Необходимость обработки файлов в C

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

  • Повторное использование. Это помогает сохранить данные или информацию, сгенерированные после запуска программы.
  • Большой объем хранилища. Используя файлы, вам не нужно беспокоиться о проблеме хранения данных в большом количестве.
  • Экономия времени. Некоторые программы требуют от пользователя большого количества действий. Вы можете легко получить доступ к любой части кода с помощью определенных команд.
  • Переносимость. Вы можете легко перенести содержимое файла с одной компьютерной системы на другую, не беспокоясь о потере данных.

3. Различные типы файлов в C

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

3.1 Текстовые файлы

Это самые простые файлы, которые пользователь может создать при работе с файлами в C. Он создается с расширением .txt в любом простом текстовом редакторе. Обычно мы используем блокноты для создания текстовых файлов. Текстовый файл хранит информацию в виде символов ASCII внутри, но когда вы открываете текстовый файл, вы обнаружите, что содержимое текста доступно для чтения людям.

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

3.2 Двоичные файлы

Двоичный файл хранит информацию в форме двоичной системы счисления (0 и 1), поэтому занимает меньше места для хранения. Проще говоря, он хранит информацию так же, как информация хранится в памяти компьютера. Следовательно, к нему гораздо проще получить доступ.

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

4. C Операции обработки файлов

  • Создание нового файла: fopen()
  • Открытие существующего файла в вашей системе: fopen()
  • Закрытие файла: fclose()
  • Чтение символов из строки: getc()
  • Запись символов в файл: putc()
  • Чтение набора данных из файла: fscanf()
  • Запись набора данных в файл: fprintf()
  • Чтение целочисленного значения из файла: getw()
  • Запись целочисленного значения в файл: putw()
  • Установка нужной позиции в файле: fseek()
  • Получение текущей позиции в файле: ftell()
  • Установка положения в начальной точке: перемотка назад()

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

Вот как это делается:

ФАЙЛ *fpointer;

Из этих различных операций есть несколько основных операций, используемых в языке программирования C, которые мы подробно обсудим один за другим:

5. Открытие текстового файла в C

Мы используем функцию fopen() для создания или открытия файла, как упоминалось ранее. Совершенно очевидно, что создание или открытие файла — это первый шаг в работе с файлом. После создания файла его можно открыть, изменить или удалить.

Основной синтаксис открытия файла:

*fpointer — это указатель на файл, который устанавливает соединение между файлом и программой.

*file_name — это имя файла.

*mode — это режим, в котором мы хотим открыть наш файл.

< td>Мы используем его, чтобы открыть текстовый файл как в режиме чтения, так и в режиме записи< td>rb

6. Закрытие текстового файла в C

Мы используем функцию fclose(), чтобы закрыть уже открытый файл. Совершенно очевидно, что файл необходимо открыть, чтобы можно было выполнить операцию закрытия файла.

Здесь fpointer — это указатель, связанный с закрытием файла. Эта функция отвечает за возврат значения 0, если файл успешно закрыт. В противном случае EOF (конец файла) в случае какой-либо ошибки при закрытии файла.

7. Чтение и запись текстового файла в C

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

Операции ввода/вывода в файле помогают читать и писать в файл.

Самые простые функции, используемые при выполнении операций чтения и записи символов в файл, — это getc() и putc() соответственно.

Для чтения и записи набора данных в файл мы используем операторы fscanf() и fprintf().

Отдохните и пересмотрите концепцию операторов в C

Вот программа на C, иллюстрирующая использование fprintf() для записи текстового файла:

Пример чтения и записи текстового файла в C

После успешной компиляции приведенного выше кода на системном диске будет создан текстовый файл.

Вывод файла для чтения и записи в C

Когда мы открываем текстовый файл, он будет отображать введенный в программе символ:

Вывод Открыть файл в C

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

Вот программа на C, иллюстрирующая использование fscanf() для чтения текстового файла:

Код —

Пример использования fscanf для чтения текстового файла на языке C

Выход-

Вывод примера fscanf для чтения текстового файла в C
< /p>

Теперь давайте попробуем понять разницу между режимом записи и режимом добавления.

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

Режим записи обозначается буквой "w", тогда как режим добавления обозначается буквой "a".

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

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

8. Чтение и запись двоичного файла в C

Мы используем функции fread() и fwrite() для чтения и записи данных из двоичного файла соответственно.

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

Обе функции fread() и fwrite() принимают для работы 4 аргумента.

Основной синтаксис для чтения двоичного файла в C:

fread(data_address, data_size, number_of_data_items, file_pointer);

Основной синтаксис для записи двоичного файла в C:

fwrite(data_address, data_size, number_of_data_items,file_pointer);

Вот программа на C, иллюстрирующая, как читать двоичный файл на C:

Код-

Пример чтения двоичного файла на C

Выход-

Вывод чтения бинарного файла в C

Подобным образом вы можете записать содержимое в двоичный файл с помощью функции fwrite().

Вот программа на C, иллюстрирующая, как писать в двоичный файл:

Код-

Пример записи в двоичный файл на C

Выход-

Вывод записи в бинарный файл на C

Вот как вывод файла сохраняется в текстовом файле:

Visual C++ включает в себя компилятор C, который можно использовать для создания чего угодно: от базовых консольных программ до полноценных приложений Windows Desktop, мобильных приложений и многого другого.

В этом пошаговом руководстве показано, как создать простую программу на C в стиле "Hello, World" с помощью текстового редактора, а затем скомпилировать ее в командной строке. Если вы предпочитаете работать на C++ в командной строке, см. Пошаговое руководство. Компиляция собственной программы на C++ в командной строке. Если вы хотите попробовать интегрированную среду разработки Visual Studio вместо использования командной строки, см. раздел Пошаговое руководство. Работа с проектами и решениями (C++) или Использование интегрированной среды разработки Visual Studio для разработки настольных систем C++.

Предпосылки

Для выполнения этого пошагового руководства необходимо установить либо Visual Studio и дополнительные компоненты Visual C++, либо инструменты сборки для Visual Studio.

Visual Studio — это мощная интегрированная среда разработки, которая поддерживает полнофункциональный редактор, менеджеры ресурсов, отладчики и компиляторы для многих языков и платформ. Сведения об этих функциях, а также о том, как загрузить и установить Visual Studio, включая бесплатную версию Visual Studio Community, см. в разделе Установка Visual Studio.

Версия Visual Studio Инструменты сборки для Visual Studio устанавливает только набор инструментов командной строки, компиляторы, инструменты и библиотеки, необходимые для сборки программ C и C++. Он идеально подходит для создания лабораторий или занятий в классе и относительно быстро устанавливается. Чтобы установить только набор инструментов командной строки, загрузите Инструменты сборки для Visual Studio со страницы загрузок Visual Studio и запустите программу установки. В установщике Visual Studio выберите рабочую нагрузку инструментов сборки C++ и нажмите "Установить".

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

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

Эти инструкции различаются в зависимости от используемой версии Visual Studio. Чтобы просмотреть документацию для предпочитаемой версии Visual Studio, используйте элемент управления выбора версии. Он находится в верхней части оглавления на этой странице.

Откройте командную строку разработчика в Visual Studio 2022

Если вы установили Visual Studio 2022 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите "Все приложения". Затем прокрутите вниз и откройте папку Visual Studio 2022 (не приложение Visual Studio 2022). Выберите Командная строка разработчика для VS 2022, чтобы открыть окно командной строки.

Откройте командную строку разработчика в Visual Studio 2019

Если вы установили Visual Studio 2019 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите "Все приложения". Затем прокрутите вниз и откройте папку Visual Studio 2019 (не приложение Visual Studio 2019). Выберите Командная строка разработчика для VS 2019, чтобы открыть окно командной строки.

Откройте командную строку разработчика в Visual Studio 2017

Если вы установили Visual Studio 2017 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите "Все приложения". Затем прокрутите вниз и откройте папку Visual Studio 2017 (не приложение Visual Studio 2017). Выберите Командная строка разработчика для VS 2017, чтобы открыть окно командной строки.

Откройте командную строку разработчика в Visual Studio 2015

Если вы установили Microsoft Visual C++ Build Tools 2015 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите "Все приложения". Затем прокрутите вниз и откройте папку Visual C++ Build Tools. Выберите Visual C++ 2015 x86 Native Tools Command Prompt, чтобы открыть окно командной строки.

Если вы используете другую версию Windows, найдите в меню "Пуск" или на начальной странице папку инструментов Visual Studio, содержащую ярлык командной строки разработчика. Вы также можете использовать функцию поиска Windows для поиска «командной строки разработчика» и выбрать ту, которая соответствует установленной версии Visual Studio. Используйте ярлык, чтобы открыть окно командной строки.

Затем убедитесь, что командная строка разработчика Visual C++ настроена правильно. В окне командной строки введите cl (или CL , регистр не имеет значения для имени компилятора, но имеет значение для параметров компилятора). Вывод должен выглядеть примерно так:

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

Если вы получаете сообщение об ошибке, например "'cl' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл", ошибка C1034 или ошибка LNK1104 при запуске команды cl, то либо вы не используете командная строка разработчика, или что-то не так с вашей установкой Visual C++. Прежде чем продолжить, вы должны устранить эту проблему.

Если вы не можете найти ярлык командной строки разработчика или получаете сообщение об ошибке при вводе cl , возможно, у вас возникла проблема с установкой Visual C++. Если вы используете Visual Studio 2017 или более позднюю версию, попробуйте переустановить разработку рабочего стола с рабочей нагрузкой C++ в установщике Visual Studio. Дополнительные сведения см. в разделе Установка поддержки C++ в Visual Studio. Или переустановите инструменты сборки со страницы загрузок Visual Studio. Не переходите к следующему разделу, пока не сработает команда cl. Дополнительные сведения об установке и устранении неполадок Visual Studio см. в разделе Установка Visual Studio.

В зависимости от версии Windows на компьютере и конфигурации безопасности системы вам может потребоваться щелкнуть правой кнопкой мыши, чтобы открыть контекстное меню для ярлыка командной строки разработчика, а затем выбрать «Запуск от имени администратора», чтобы успешно собрать и запустить программу, которая вы создаете, следуя этому пошаговому руководству.

Создайте исходный файл C и скомпилируйте его в командной строке

В окне командной строки разработчика введите cd c:\, чтобы изменить текущий рабочий каталог на корень вашего диска C:. Затем введите md c:\hello, чтобы создать каталог, а затем введите cd c:\hello, чтобы перейти в этот каталог. Этот каталог будет содержать ваш исходный файл и скомпилированную программу.

Введите notepad hello.c в командной строке разработчика. В появившемся диалоговом окне предупреждения Блокнота выберите Да, чтобы создать новый файл hello.c в рабочем каталоге.

В Блокноте введите следующие строки кода:

В строке меню Блокнота выберите «Файл» > «Сохранить», чтобы сохранить hello.c в рабочем каталоге.

Вернитесь в окно командной строки разработчика. Введите dir в командной строке, чтобы просмотреть содержимое каталога c:\hello. Вы должны увидеть исходный файл hello.c в списке каталогов, который выглядит примерно так:

Даты и другие данные на вашем компьютере будут отличаться. Если вы не видите файл с исходным кодом, привет.c убедитесь, что вы перешли в созданный вами каталог c:\hello, а в Блокноте убедитесь, что вы сохранили исходный файл в этом каталоге. Также убедитесь, что вы сохранили исходный код с расширением имени файла .c, а не с расширением .txt.

Чтобы скомпилировать программу, введите cl hello.c в командной строке разработчика.

Вы можете увидеть имя исполняемой программы hello.exe в строках выходной информации, отображаемой компилятором:

Если вы получаете сообщение об ошибке, например "'cl' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл", ошибка C1034 или ошибка LNK1104, командная строка вашего разработчика настроена неправильно. Чтобы узнать, как решить эту проблему, вернитесь к разделу Открытие командной строки разработчика.

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

Чтобы запустить программу, введите hello в командной строке.

Программа отображает этот текст, а затем завершает работу:

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

Дальнейшие шаги

Этот пример "Hello, World" настолько прост, насколько это возможно для программы на C. Реальные программы имеют файлы заголовков и другие исходные файлы, связываются с библиотеками и выполняют полезную работу.

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

cl файл1.c файл2.c файл3.c

Компилятор выводит программу с именем file1.exe. Чтобы изменить имя на program1.exe, добавьте параметр компоновщика /out:

cl file1.c file2.c file3.c /link /out:program1.exe

Чтобы автоматически обнаруживать больше ошибок программирования, мы рекомендуем вам компилировать с параметром уровня предупреждения /W3 или /W4:

cl /W4 файл1.c файл2.c файл3.c /ссылка /out:program1.exe

Компилятор cl.exe имеет гораздо больше параметров, которые можно применять для сборки, оптимизации, отладки и анализа кода. Для быстрого списка введите cl /? в командной строке разработчика. Вы также можете скомпилировать и связать отдельно и применить параметры компоновщика в более сложных сценариях сборки. Дополнительные сведения о параметрах компилятора и компоновщика и их использовании см. в справочнике по сборке C/C++.

Вы можете использовать NMAKE и make-файлы или MSBuild и файлы проекта для настройки и сборки более сложных проектов в командной строке. Дополнительные сведения об использовании этих инструментов см. в справочнике NMAKE и MSBuild.

Языки C и C++ похожи, но не одинаковы. Компилятор Microsoft C/C++ (MSVC) использует основное правило, чтобы определить, какой язык использовать при компиляции кода. По умолчанию компилятор MSVC обрабатывает все файлы, заканчивающиеся на .c, как исходный код C, а все файлы, заканчивающиеся на .cpp, как исходный код C++. Чтобы заставить компилятор обрабатывать все файлы как C независимо от расширения имени файла, используйте параметр компилятора /TC.

MSVC совместим со стандартами ANSI C89 и ISO C99, но не соответствует им строго. В большинстве случаев переносимый код C будет компилироваться и работать, как и ожидалось. Компилятор обеспечивает дополнительную поддержку изменений в ISO C11/C17. Для компиляции с поддержкой C11/C17 используйте флаг компилятора /std:c11 или /std:c17 . Для поддержки C11/C17 требуется Windows SDK 10.0.20201.0 или более поздней версии. Рекомендуется Windows SDK 10.0.22000.0 или более поздней версии. Вы можете загрузить последнюю версию SDK со страницы Windows SDK. Дополнительные сведения и инструкции по установке и использованию этого пакета SDK для разработки C см. в статье Установка поддержки C11 и C17 в Visual Studio.

Некоторые библиотечные функции и имена функций POSIX не поддерживаются MSVC. Функции поддерживаются, но предпочтительные имена изменились. Дополнительные сведения см. в разделе Функции безопасности в CRT и предупреждение компилятора (уровень 3) C4996.

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

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

Компилируемые языки (например, C, C++)

Следующее иллюстрирует процесс программирования для скомпилированного языка программирования.


Компилятор берет программный код (исходный код) и преобразует исходный код в модуль машинного языка (называемый объектным файлом). Другая специализированная программа, называемая компоновщиком, объединяет этот объектный файл с другими ранее скомпилированными объектными файлами (в частности, модулями времени выполнения) для создания исполняемого файла. Этот процесс изображен на схеме ниже. Нажмите Начальная сборка, чтобы увидеть анимацию создания исполняемого файла. Щелкните Запустить исполняемый файл, чтобы имитировать запуск уже созданного исполняемого файла. Нажмите «Перестроить», чтобы имитировать перестроение исполняемого файла.

Исходная сборка Запустить исполняемый файл Rebuild

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

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

Интерпретируемые языки программирования (например, Python, Perl)

Для интерпретируемого языка этот процесс отличается. Вместо перевода исходного кода на машинный язык до создания исполняемого файла интерпретатор преобразует исходный код на машинный язык во время работы программы. Это показано ниже:


В интерпретируемых языках используется специальная программа, называемая интерпретатором, которая преобразует исходный код, объединяется с библиотеками времени выполнения и выполняет полученные машинные инструкции во время выполнения. В отличие от скомпилированного языка, здесь нет предварительно скомпилированной программы для запуска. Процесс преобразования и объединение с библиотеками времени выполнения происходит каждый раз, когда запускается программа на интерпретируемом языке. Вот почему программы, написанные на скомпилированных языках, работают быстрее, чем аналогичные программы, написанные на интерпретируемых языках. Нажмите Start, чтобы запустить симуляцию интерпретируемой программы. Нажмите «Перезапустить», если хотите снова запустить симуляцию.

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

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

А теперь кое-что другое. Java

Язык программирования Java не вписывается ни в модели компилируемого языка, ни в модели интерпретируемого языка. Это показано на рисунке ниже.


Компилятор Java (javac) преобразует исходный код в байт-код. Байт-код — это своего рода средний машинный язык. Этот файл байт-кода (файл .class) можно запустить в любой операционной системе с помощью интерпретатора Java (java) для этой платформы. Интерпретатор называется виртуальной машиной. Таким образом, Java является примером языка программирования для виртуальных машин.

Языки виртуальных машин были созданы как компромисс между компилируемыми и интерпретируемыми языками. В идеальных условиях программы на языке виртуальной машины работают ближе по скорости к программам на скомпилированном языке, но обладают независимостью от платформы программ на интерпретируемом языке.

Способ, которым языки программирования виртуальных машин получают часть скорости компилируемых языков, заключается в том, что исходный код пропускается через компилятор для создания байт-кода. Это преобразование происходит до запуска программы. Способ, которым языки виртуальных машин достигают своей переносимости (независимости от платформы), заключается в наличии разных интерпретаторов для каждой поддерживаемой операционной системы. Этот интерпретатор связывает правильные библиотеки времени выполнения для каждой операционной системы. Скомпилированный байт-код представляет собой средний машинный язык, который будет работать без изменений с любым интерпретатором виртуальной машины для этого языка. Этот процесс проиллюстрирован далее. У нас есть компилятор, который преобразует исходный код в байт-код. Это можно смоделировать, нажав кнопку Compile.После создания байт-кода этот же байт-код можно использовать без каких-либо изменений в любой операционной системе, имеющей интерпретатор виртуальной машины для языка программирования. Обратите внимание, что каждый из интерпретаторов виртуальных машин имеет разный код библиотеки времени выполнения, поскольку каждая операционная система имеет разные библиотеки времени выполнения. Вот как язык виртуальной машины решает проблемы зависимости от платформы. Нажмите «Запустить Windows», «Запустить Mac OSX» или «Запустить Linux», чтобы имитировать запуск программы в любой из этих операционных систем.

Читайте также:

РЕЖИМ ПОЯСНЕНИЕ
r Мы используем его для открытия текстового файла в режиме чтения
w Мы используем его для открытия или создания текстового файла в режиме записи
a Мы используем его, чтобы открыть текстовый файл в режиме добавления
r+
w+ Мы используем его, чтобы открыть текстовый файл как в режиме чтения, так и в режиме записи. режим записи
a+ Мы используем его, чтобы открыть текстовый файл как в режиме чтения, так и в режиме записи
Мы используем его для открытия бинарного файла в режиме чтения
wb Мы используем его для открытия или создания двоичный файл в режиме записи
ab Мы используем его для открытия двоичного файла в режиме добавления
rb+ Мы используем его для открытия двоичного файла в режиме чтения и записи
wb+ Мы используем его открыть бинарный файл в обоих ре режим чтения и записи
ab+ Мы используем его для открытия двоичного файла как в режиме чтения, так и в режиме записи