Исходный файл что это
Исходные файлы
Исходные файлы
Текст программы на языке Си может быть разделен на несколько исходных файлов. Исходный файл представляет собой текстовый файл, который содержит либо всю программу, либо ее часть. При компиляции исходной программы каждый из составляющих ее исходных файлов должен быть скомпилирован отдельно, а затем связан с другими файлами компоновщиком. Отдельные исходные файлы можно объединять в один исходный файл, компилируемый как единое целое, посредством директивы препроцессора #include.
Исходный файл может содержать любую целостную комбинацию директив, указаний компилятору, объявлений и определений. Под целостностью подразумевается, что такие объекты, как определения функций, структуры данных либо набор связанных между собой директив условной компиляции, должны целиком располагаться в одном файле, т. е. не могут начинаться в одном файле, а продолжаться в другом.
Исходный файл не обязательно должен содержать выполняемые операторы. Иногда удобно размещать определения переменных в одном файле, а в других файлах использовать эти переменные путем их объявления. В этом случае определения переменных становятся легко доступными для поиска и модификации. Из тех же соображений именованные константы и макроопределения обычно собирают в отдельные файлы и включают их посредством директивы препроцессора #include в те исходные файлы, в которых они требуются.
Указания компилятору обычно действуют только для отдельных участков исходного файла. Специфические действия компилятора, задаваемые указаниями, определяются конкретной реализацией компилятора языка Си.
В нижеследующем примере исходная программа состоит из двух исходных файлов. Функции main и max представлены в отдельных файлах. Функция main использует функцию max в процессе своего выполнения.
/* исходный файл 1 — функция main */
extern int max (int, int); /* объявление функции */
Исходные файлы
Текст программы на языке Си может быть разделен на несколько исходных файлов. Исходный файл представляет собой текстовый файл, который содержит либо всю программу, либо ее часть. При компиляции исходной программы каждый из составляющих ее исходных файлов должен быть скомпилирован отдельно, а затем связан с другими файлами компоновщиком. Отдельные исходные файлы можно объединять в один исходный файл, компилируемый как единое целое, посредством директивы препроцессора #include.
Исходный файл может содержать любую целостную комбинацию директив, указаний компилятору, объявлений и определений. Под целостностью подразумевается, что такие объекты, как определения функций, структуры данных либо набор связанных между собой директив условной компиляции, должны целиком располагаться в одном файле, т. е. не могут начинаться в одном файле, а продолжаться в другом.
Исходный файл не обязательно должен содержать выполняемые операторы. Иногда удобно размещать определения переменных в одном файле, а в других файлах использовать эти переменные путем их объявления. В этом случае определения переменных становятся легко доступными для поиска и модификации. Из тех же соображений именованные константы и макроопределения обычно собирают в отдельные файлы и включают их посредством директивы препроцессора #include в те исходные файлы, в которых они требуются.
Указания компилятору обычно действуют только для отдельных участков исходного файла. Специфические действия компилятора, задаваемые указаниями, определяются конкретной реализацией компилятора языка Си.
В нижеследующем примере исходная программа состоит из двух исходных файлов. Функции main и max представлены в отдельных файлах. Функция main использует функцию max в процессе своего выполнения.
/* исходный файл 1 — функция main */
extern int max (int, int); /* объявление функции */
В чем отличие бинарного файла от исходного?
Во время работы с Linux у вас есть возможность на выбор использовать два совсем разных способа установки программ, а именно:
Выбрать нужный необходимо отталкиваясь от ваших потребностей и требований к системе, ну и конечно от наличия навыков и опыта в развертывании ПО. Рассмотрим отдельно каждый из методов, их плюсы, а также минусы и трудности, которые могут встретиться при установке.
Бинарный файл
Для установки требуется специальная программа для распаковки этих файлов и помещения их на компьютер. То есть менеджер пакетов вашего дистрибутива Linux (например, apt, yum и т. д.). Менеджер пакетов также выполняет и другие полезные функции кроме распаковки, такие как отслеживание установленных файлов и управление обновлениями программного обеспечения.
Преимущества и плюсы использования бинарных файлов
Недостатки и минусы использования
Исходные файлы
Чтобы получить tar-архив с исходным кодом для определенного программного обеспечения, вам нужно знать URL-адрес к tar-архиву. После чего нужно распаковать скачанный tar-архив специальной командой tar для определенного типа расширения архива, чтобы получить доступ к файлам и возможность работать с исходником. Следующим шагом выполняются нужные настройки среды для компиляции и установки программного обеспечения из исходного кода.
Исходные файлы, написанные на разных языках, и нуждаются в специальных компиляторах и командах для преобразования его в исполняемый бинарный файл, который будет читаемым для системы и затем сможет запустить ваш компьютер.
Специальный набор инструментов помогает автоматизировать этот процесс. На десктопах Linux это обычно происходит в форме программы командной строки под названием make. Выше перечислены стандартные этапы, при выполнении каких возможно могут появляться ошибки, и будет необходимо выполнять дополнительные манипуляции, в этом и есть сложность внедрения проектов через исходные файлы.
Касательно вопроса, где можно найти исходный код к продукту, вариантов много, в большинстве случаев Вы можете загрузить исходный код проекта с таких сервисов, как GitHub или BitBucket. Некоторые владельцы ПО могут даже разместить его на личном веб-сайте.
Преимущества и плюсы использования исходных файлов
Недостатки и минусы использования
К минусам этот пункт можно и не относить, но для установки ПО с исходника потребуется уже наличие теоретических знаний и необходимых навыков в понимании документации к продукту, работы с терминалом и т.д., тут обычному пользователю может быть сложно.
Оба метода хороши и несут в себе разные цели использования. В большинстве случаев достаточно выбрать стандартный метод с помощью бинарных файлов.
Файлы с исходным кодом и исходные программы
Исходную программу можно разделить на один или несколько «исходных файлов» или «единиц преобразования». Входные данные для компилятора называются «единицей преобразования».
Синтаксис
translation-unit:
external-declaration
translation-unitexternal-declaration
external-declaration:
function-definition
declaration
Описание соглашений о синтаксисе ANSI вы найдете во введении к статье Общие сведения о синтаксисе языка C.
Компонентами блока трансляции являются внешние объявления, которые включают в себя определения функций и объявления идентификаторов. Эти объявления и определения могут находиться в исходных файлах, файлах заголовков, библиотеках и других файлах, которые необходимы программе. Чтобы создать программу, необходимо скомпилировать каждый блок трансляции и скомпоновать полученный объектный файл.
Исходная программа языка C представляет собой набор директив, директив pragma, объявлений, определений, блоков операторов и функций. Для того чтобы все они были допустимыми компонентами программы на языке Microsoft C, они должны иметь синтаксис, описанный в настоящей книге. При этом они могут находиться в программе в любом порядке (в пределах описанных здесь правил). Однако от расположения этих компонентов в программе зависит то, каким образом в программе будут использоваться переменные и функции. (Дополнительные сведения см. в статье Время существования, область, видимость и компоновка.)
Исходные файлы не должны содержать исполняемых операторов. К примеру, в один исходный файл можно поместить все определения переменных, а затем в другом исходном файле, в котором эти переменные используются, объявить ссылки на них. Этот метод позволяет легко находить и при необходимости изменять определения. По этой же причине константы и макросы часто организуются в отдельные файлы — так называемые включаемые файлы, или файлы заголовка. По мере необходимости на них можно ссылаться из исходных файлов. Сведения о макросах и включаемых файлах см. в справочнике по препроцессору.
Педантичность: что такое исходный файл? Что такое заголовок?
Для целей этого вопроса меня интересует только стандартно-совместимый С++, а не C или С++ 0x, а не детали, специфичные для реализации.
ISO/IEC 14882: 2003 (E)
16.2 Включение исходного файла [cpp.include]
1 Директива #include должна идентифицировать заголовок или исходный файл, который может быть обработан реализацией.
2 Директива предварительной обработки формы
3 Директива предварительной обработки формы
с идентичной содержащейся последовательностью (включая > символы, если таковые имеются) из исходной директивы.
(Акцент в приведенной выше цитате мой.) Подразумевается, что эта разница, по-видимому, заключается в том, что стандарт намеревается различать “заголовок” и “исходный файл”, но нигде в документе не определено ни одно из этих терминов, ни разница между ними.
Есть несколько других мест, где упоминаются заголовки или исходные файлы. Несколько:
158) Заголовок не обязательно является исходным файлом, равно как и последовательности, ограниченные именами заголовков, обязательно являются допустимыми именами исходных файлов (16.2).
Похоже, что заголовок может не находиться в файловой системе, но он также не говорит, что файлы исходного кода тоже.
2 Лексические условные обозначения [lex]
Это наиболее близкое к определению определение, и, похоже, заголовки не являются “текстом программы”. Но если вы #include заголовок, не станет ли он частью текста программы? Это немного вводит в заблуждение.
Итак, что такое заголовок? Что такое исходный файл?
Разве это не означает, что заголовок может быть реализован как исходный файл, но опять же может не быть? что касается “то, что является исходным файлом”, кажется очень разумным, что стандарт не должен указывать на это, учитывая множество способов реализации “файлов”.
Стандартные заголовки (строка, iostream) необязательно должны быть файлами с этими именами или даже файлами. Пока вы говорите
в сферу применения входит определенный список объявлений, стандарт удовлетворен. Точно как это происходит, это деталь реализации. (когда был написан стандарт, DOS могла обрабатывать только 8,3 имени файла, но некоторые из стандартных имен заголовков были длиннее, чем это)
По соглашению заголовки обычно являются общесистемными, а исходные файлы обычно являются локальными для проекта (для некоторого определения проекта), но стандарт мудро не увязнет во всем, что связано с организацией проекта; он просто дает очень общие определения, которые совместимы с такими соглашениями, оставляя детали для реализации и/или пользователя.
Почти все стандартные сделки с программой после ее предварительной обработки, и в это время нет таких вещей, как исходные файлы или заголовки, только единицы переводов, которые определяет ваша последняя кавычка.
Мое случайное понимание заключалось в том, что различие между включенными include и “было унаследовано от c и (хотя и не определено стандартами), фактическим значением было то, что найденные пути для системных и компиляторов предоставили заголовки и” ” также искали локальные и пользовательские пути.
Вышеприведенное определение, похоже, в каком-то смысле согласуется с этим использованием, но ограничивает использование “заголовка” вещами, предоставляемыми компилятором или системой, исключающей код, предоставленный пользователем, даже если у них есть традиционный “интерфейс” форма заголовка.