Как скомпилировать файл c

Обновлено: 02.07.2024

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

Хотя перекомпилировать и скомпоновать программу с одним исходным кодом может быть проще с помощью одной команды cc, обычно удобнее компилировать программы с несколькими исходными кодами поэтапно — сначала путем компиляции каждого исходного файла в отдельный объект ( .o ), а затем путем связывания объектных файлов для формирования исполняемого файла ( a.out ). Этот метод требует больше места на диске, но последующие (повторяющиеся) перекомпиляции необходимо выполнять только для тех объектных файлов, для которых изменились исходники, что экономит время.

Простой пример Makefile

Следующий make-файл не выглядит элегантно, но работает.

Таблица 4-4 Простой Makefile для компиляции исходных кодов C: все явные

В этом примере make создает объектные файлы main.o и data.o , а также исполняемый файл functions :

Использование предопределенных макросов make

Следующий пример выполняет точно такую ​​же функцию, но демонстрирует использование предопределенных макросов make для указанных команд компиляции. Использование предопределенных макросов устраняет необходимость редактирования make-файлов при изменении базовой среды компиляции. Макросы также предоставляют доступ к макросу CFLAGS (и другим макросам FLAGS) для предоставления параметров компилятора из командной строки. Предопределенные макросы также широко используются в неявных правилах make. Предопределенные макросы в следующем make-файле перечислены ниже. [Предопределенные макросы используются более широко, чем в более ранних версиях make. Не все предопределенные макросы, показанные здесь, доступны в более ранних версиях. ] Как правило, они полезны для компиляции программ на C.

Командная строка cc; состоит из следующих значений CC, CFLAGS и CPPFLAGS, а также параметра -c.

Корень имени макроса, COMPILE , является соглашением, используемым для обозначения того, что макрос представляет собой командную строку компиляции (для создания объекта или файла .o). Суффикс .c — это мнемонический прием, указывающий, что командная строка применяется к файлам .c (исходный код C).

Имена макросов, заканчивающиеся строкой FLAGS, передают параметры соответствующему макросу команды компилятора. Рекомендуется использовать эти макросы для согласованности и переносимости. Также рекомендуется отметить желаемые значения по умолчанию для них в make-файле. Полный список всех предопределенных макросов показан в таблице 4-9.

Базовая командная строка cc для связывания объектных файлов, например COMPILE.c , но без параметра -c и со ссылкой на макрос LDFLAGS:

Значение cc. (Вы можете переопределить это значение как путь к альтернативному компилятору C.)

Параметры команды cc; по умолчанию нет.

Параметры cpp ; по умолчанию нет.

Параметры редактора ссылок, ld ; по умолчанию нет.

Таблица 4-5 Makefile для компиляции исходных текстов C с использованием предопределенных макросов

Использование неявных правил для упрощения Makefile: правила суффиксов

Поскольку командные строки для компиляции main.o и data.o из их файлов .c теперь функционально эквивалентны правилу суффикса .c.o, их целевые записи являются избыточными; make выполняет одну и ту же компиляцию вне зависимости от того, присутствуют они в make-файле или нет. В следующей версии make-файла они устранены, полагаясь на правило .c.o для компиляции отдельных объектных файлов.

Таблица 4-6 Makefile для компиляции исходных кодов C с использованием суффиксных правил

Полный список правил суффиксов приведен в таблице 4-8.

Поскольку make обрабатывает зависимости main.o и data.o , он не находит для них целевых записей. Он проверяет применимость подходящего неявного правила. В этом случае make выбирает правило .c.o для создания файла .o из файла зависимостей с тем же базовым именем и суффиксом .c.

make использует порядок появления в списке суффиксов, чтобы определить, какой файл зависимостей и правило суффикса использовать. Например, если в каталоге есть файлы main.c и main.s, make использует правило .c.o, так как .c стоит впереди .s в списке.

Сначала make просматривает свой список суффиксов, чтобы увидеть, появляется ли суффикс для целевого файла. В случае с main.o в списке появляется .o. Затем проверьте наличие суффиксного правила для его сборки и файла зависимостей для его построения. Файл зависимостей имеет то же базовое имя, что и целевой, но другой суффикс. В этом случае при проверке правила .c.o make находит файл зависимостей с именем main.c и использует это правило.

Список суффиксов представляет собой цель специальной функции с именем .SUFFIXES. Различные суффиксы включены в определение макроса SUFFIXES; список зависимостей для .SUFFIXES указывается как ссылка на этот макрос:

Таблица 4-7. Список стандартных суффиксов "top">СУФФИКСЫ= .o .c .c~ .cc .cc~ .C .C~ .y .y~ .l .l~ .s .s~ .sh .sh~ .S .S ~ .ln \ .h .h~ .f .f~ .F .F~ .mod .mod~ .sym .def .def~ .p .p~ .r .r~ \ .cps .cps~ .Y . Y~ .L .L~ .SUFFIXES: $(SUFFIXES)

В следующем примере показан make-файл для компиляции всего набора исполняемых программ, каждая из которых имеет только один исходный файл. Каждый исполняемый файл должен быть создан из исходного файла с тем же базовым именем и добавленным суффиксом .c. Например, demo_1 собран из demo_1.c .

Как и clean, all — это целевое имя, используемое по соглашению. Он создает «все» цели в своем списке зависимостей. Обычно make и make all эквивалентны.

В этом случае make не находит суффикс, совпадающий ни с одной из целей (через demo_5). Таким образом, он обрабатывает каждый, как если бы он имел нулевой суффикс. Затем он ищет суффиксное правило и файл зависимостей с допустимым суффиксом. В случае demo_2 будет найден файл с именем demo_2.c . Поскольку существует целевая запись для правила .c вместе с соответствующим файлом .c, make использует это правило для сборки demo_2 из demo_2.c .

Чтобы предотвратить двусмысленность, когда цель с нулевым суффиксом имеет явную зависимость, make не создает ее с использованием правила суффикса. Этот make-файл

не выводит:

Когда использовать явные целевые записи и неявные правила

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

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

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

Неявные правила и динамические макросы

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

Поскольку они не определены явным образом в make-файле, принято документировать динамические макросы с присоединенным префиксом $-sign (другими словами, показывая ссылку на макрос).

Имя текущей цели.

Список зависимостей новее, чем цель.

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

Основное имя текущей цели (имя цели без суффикса).

Для библиотек: имя обрабатываемого элемента. Дополнительную информацию см. в разделе "Создание библиотек объектов".

Неявные правила используют эти динамические макросы для указания имени целевого файла или файла зависимостей в командной строке внутри самого правила. Например, в правиле .c.o, показанном в следующем примере:

$ заменяется именем файла зависимостей (в данном случае файла .c) для текущей цели.

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

$@ заменяется именем текущей цели.

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

Динамические макромодификаторы

Динамические макросы можно изменить, включив в ссылку F и D. Если обрабатываемая цель имеет форму пути, $(@F) указывает часть имени файла, а $(@D) указывает часть каталога. Если в имени цели нет символов /, то $(@D) присваивается символ точки (.) в качестве значения. Например, для цели с именем /tmp/test $(@D) имеет значение /tmp; $(@F) имеет значение test.

Динамические макросы и список зависимостей: отложенные ссылки на макросы

Динамические макросы назначаются при обработке всех без исключения целей. Их можно использовать в целевом правиле как есть или в списке зависимостей, добавив перед ссылкой дополнительный символ $. Ссылка, начинающаяся с $$, называется отложенной ссылкой на макрос. Например, запись:

можно использовать для получения x.o из x.o.BAK и т. д. для y.o и z.o .

Список зависимостей читается дважды

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

Строка $$ является ссылкой на предопределенный макрос ` $ '. Для удобства этот макрос имеет значение `$'; когда make разрешает ее при начальном чтении, строка $$@ разрешается в $@. При сканировании зависимостей, когда результирующая ссылка на макрос $@ имеет значение, динамически назначенное ей, make разрешает ссылку на это значение.

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

выдает следующие результаты.

Правила оцениваются один раз

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

Запрещено переходное замыкание для суффиксных правил

Для суффиксных правил транзитивное замыкание отсутствует. Если бы у вас было правило суффикса для построения, скажем, файла .Y из файла .X, а другое — для создания файла .Z из файла .Y, make не стал бы комбинировать их правила для создания файла .Z из файла . Х файл. Вы должны указать промежуточные шаги в качестве целей, хотя их записи могут иметь пустые правила:

В этом примере trans.Z строится из trans.Y, если он существует. Без появления trans.Y в качестве целевой записи make мог бы завершиться с ошибкой «не знаю, как собрать», так как не было бы файла зависимостей, который можно было бы использовать. Целевая запись для trans.Y гарантирует, что make попытается собрать его, если он устарел или отсутствует. Поскольку в make-файле нет правил, make будет использовать соответствующее неявное правило, которым в данном случае будет правило .X.Y. Если trans.X существует (или может быть получен из SCCS ), при необходимости выполните перестроение как trans.Y, так и trans.Z.

Добавление правил для суффиксов

Хотя make предоставляет вам ряд полезных правил суффиксов, вы также можете добавлять новые собственные. Однако при добавлении новых неявных правил следует отдавать предпочтение правилам сопоставления с образцом (см. «Правила сопоставления с образцом: альтернатива правилам суффиксов». Если вам не нужно писать неявные правила, совместимые с более ранними версиями make, вы можете пропустить оставшаяся часть этого раздела, в которой описывается традиционный метод добавления неявных правил в make-файлы (процедура добавления неявных правил приведена здесь для совместимости с предыдущими версиями make).

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

Во-вторых, вы должны добавить целевую запись для правила суффикса:

Makefile с этими записями можно использовать для форматирования исходных файлов документов, содержащих макросы ms (файлы .ms), в выходные файлы troff (файлы .tr):

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

Затем вы можете добавить еще одну запись, содержащую новые суффиксы, а затем ссылку на макрос SUFFIXES, как показано ниже.

Правила сопоставления с образцом: альтернатива правилам суффиксов

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

где tp и ts — необязательные префикс и суффикс в имени цели, dp и ds — (необязательный) префикс и суффикс в имени зависимости, а % — это подстановочный знак, обозначающий базовое имя, общее для обоих.

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

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

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

Правило сопоставления с шаблоном для форматирования исходного файла troff в выходной файл troff выглядит следующим образом:

Правила суффиксов по умолчанию и предопределенные макросы make

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

Как мы компилируем и запускаем программу C?
Ниже приведены шаги, которые мы используем на компьютере с Ubuntu с компилятором gcc.

  • Сначала мы создаем программу на C с помощью редактора и сохраняем файл под именем filename.c
  • На схеме справа показана простая программа для сложения двух чисел.
  • Затем скомпилируйте его с помощью приведенной ниже команды.
  • Опция -Wall включает все предупреждающие сообщения компилятора. Этот вариант рекомендуется для создания лучшего кода.
    Опция -o используется для указания имени выходного файла. Если мы не используем эту опцию, то создается выходной файл с именем a.out.


  • После создания исполняемого файла компиляции мы запускаем сгенерированный исполняемый файл с помощью приведенной ниже команды.
  1. Предварительная обработка
  2. Подборка
  3. Сборка
  4. Связь

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

На следующем снимке экрана показаны все сгенерированные промежуточные файлы.


Давайте посмотрим один за другим, что содержат эти промежуточные файлы.

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

  • Удаление комментариев
  • Расширение макросов
  • Расширение включенных файлов.
  • Условная компиляция

Компиляция

Следующим шагом является компиляция filename.i и создание файла; промежуточный скомпилированный выходной файл имя_файла.s. Этот файл находится в инструкциях уровня сборки. Давайте просмотрим этот файл, используя $vi filename.s


Снимок показывает, что он написан на языке ассемблера, который ассемблер понимает.

Сборка
На этом этапе имя файла.s берется в качестве входных данных и преобразуется ассемблером в имя файла.o. Этот файл содержит инструкции машинного уровня. На этом этапе только существующий код преобразуется в машинный язык, вызовы функций, таких как printf(), не разрешаются. Давайте просмотрим этот файл, используя $vi filename.o


Связывание

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


Обратите внимание, что GCC по умолчанию выполняет динамическую компоновку, поэтому printf() динамически компонуется в приведенной выше программе. Обратитесь к этому, этому и этому для получения более подробной информации о статических и динамических ссылках.
Эта статья предоставлена ​​Викашем Кумаром. Пожалуйста, пишите комментарии, если вы обнаружите что-то неверное или хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

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 в списке каталогов, который выглядит примерно так:

Даты и другие данные на вашем компьютере будут отличаться. Если вы не видите файл исходного кода hello.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 в Linux и Windows. Документ также содержит список доступных компиляторов C.

Мы увидим, как компилировать с помощью Visual C++ 2008 Express Edition, Turbo C++, wxDev-C++ в Windows. Для операционных систем Linux и Unix мы будем использовать GNU Gcc для компиляции программы C. Оба они бесплатны.

Содержание:

Установить, скомпилировать и выполнить программу C с помощью Visual C++ 2008 Express Edition с пакетом обновления 1 (SP1) в Windows

Скачать и установить

После завершения установки в Windows 7 запустите командную строку Visual Studio 2008, выбрав Все программы > Microsoft Visual C++ 2008 Express Edition > Инструменты Visual Studio > Командная строка Visual Studio 2008.

визуальная студия командной строки

Напишите, скомпилируйте и выполните свою первую программу

Шаг 1: введите notepad demo.c (вы можете заменить имя файла на свое) и нажмите Enter. Когда вас спросят, хотите ли вы создать новый файл, ответьте "да".

visual studio command prompt

Шаг 2. Введите следующий код и нажмите «Файл» > «Сохранить». Когда вас спросят, где сохранить файл, выберите подходящее место.

Шаг 3. Введите cl sample.c и нажмите Enter. Это скомпилирует программу для создания исполняемого файла (.exe).

компилировать программу C для Windows 7

Шаг 4. Теперь просто введите имя образца файла и введите его. Это покажет вам результат.

Вывод программы C для Windows 7

Установить, скомпилировать и выполнить программу C с помощью Turbo C++ в Windows

Получить и установить

Turbo C++ — очень популярный компилятор C и IDE. Проблема в том, что Borland, организация-создатель компилятора и IDE, не предоставляет никаких возможностей для загрузки компилятора и IDE. Но если вы погуглите с «загрузкой Turbo C++», вы получите множество сайтов для загрузки компилятора и IDE. Есть три файла для загрузки - TC.exe, tc.r00 и tc.r01. После загрузки запустите файл TC.exe, он создаст папку TC в конце процесса установки. Чтобы запустить Turbo C++, войдите в каталог bin в TC и найдите tc.exe. Дважды щелкните файл tc.exe, и откроется Turbo C++ IDE.

Запустите Turbo C++ в полноэкранном режиме в Windows 7

Те, кто использует Turbo C++ в Windows 7, при открытии среды IDE нажмите «Игнорировать» во всплывающем окне с сообщением о том, что она не поддерживает полноэкранный режим. Теперь щелкните в верхнем левом углу окна Turbo C++ и выберите «Свойства». Выберите вкладку «Шрифт» и измените шрифт на «Lucidia Console» с «Растровых шрифтов» по ​​умолчанию. Также измените размер шрифта на «28». Теперь выберите вкладку «Макет» и установите «Ширина» на 80 и «Высота» на 25 в разделе «Размер буфера экрана». В разделе «Размер окна» измените «Ширина» на 60 и «Высота» на 25. В разделе «Положение окна» установите значение «Слева» и «Сверху» как -4. Убедитесь, что флажок «Окно левого положения системы» не установлен. Нажмите «ОК», чтобы закрыть окно свойств. Теперь вы можете увидеть IDE Turbo C++ в полноэкранном режиме.

окно Turbo C++

Написать, скомпилировать и запустить программу на C

Откройте новый файл, выбрав «Файл» > «Создать» в Turbo C++ IDE. Напишите небольшую программу в среде IDE.

Теперь выберите «Файл» > «Сохранить как» и сохраните программу с именем файла по вашему выбору (убедитесь, что расширение имени файла .c).

Нажмите «Параметры» и перейдите в «Каталоги». Нажмите «Каталоги» и установите «Каталог вывода» по своему усмотрению, а «Исходный каталог» — в качестве папки, в которой вы сохранили файл программы C.

Теперь перейдите к компиляции и нажмите «Компилировать». А затем нажмите «Выполнить». Вы увидите результат своей программы на C.

Написать, скомпилировать и запустить программу C с помощью wxDev-C++ в Windows

После загрузки установщика запустите исполняемый файл, дважды щелкнув его, и мастер установки поможет вам выполнить установку. После завершения установки вы запускаете ее из «Программы», и при первом запуске требуется некоторое время для анализа файлов заголовков. Окно IDE выглядит следующим образом:

окно wxDev-C++ IDE

Вы можете начать программирование, нажав Файл > Создать > Исходный файл в окне. Обратите внимание, что при сохранении файла необходимо выбрать тип файла C, так как эта среда IDE также поддерживает C++.

окно wxDev-C++ IDE

Вы можете использовать F9 или, как показано ниже, для компиляции и запуска программы.

окно wxDev-C++ IDE

По завершении компиляции открывается новое окно, в котором отображаются результаты.

окно wxDev-C++ IDE


Если у вас есть ошибки, они отображаются на панели ниже, как показано ниже.

окно wxDev-C++ IDE

Несмотря на то, что wxDev-C++ немного устарела, мы считаем, что wxDev-C++ является отличной IDE для программирования C. Вы можете попробовать ее, если используете Windows.

Установить, скомпилировать и выполнить программу C в Linux

В большинстве случаев при установке Linux компилятор GNU Gcc уже установлен. Если нет, выполните следующую команду (наша система — Ubuntu Linux):

c install linux

Если компилятор C уже установлен, он покажет вам сообщение, подобное приведенному выше. Если нет, он установит все необходимые пакеты.

Теперь откройте текстовый редактор и напишите небольшую программу на C, как показано ниже, и сохраните ее как demo.c :

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

c-program run linux

Вот как вы можете установить компилятор GNU Gcc, написать программу на C и запустить ее под Linux.

Список компиляторов C

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

< /tr> < td>Запатентовано< td>GCC C
Компилятор Автор Операционная система IDE? Тип лицензии
AMPC Axiomatic Solutions Sdn Bhd Windows,Unix и другие Да
Amsterdam Compiler Kit Эндрю Таненбаум и Сериэль Джейкобс Unix и другие Нет BSD
Компилятор CCS C CCS, Inc. Windows,Unix и другие Да Проприетарное
Clang Низкоуровневая виртуальная машина Windows,Unix и другие Нет BSD
Реинжиниринг программного обеспечения DMS Инструментарий Semantic Designs Windows, Unix и другие Нет Проприетарное
Проект GNU Windows,Unix,мейнфреймы IBM, AmigaOS, VAX/VMS, RTEMS Нет GPL
RCC (компилятор RCOR C) Родриго Каэтано (rcor) Windows,Unix Нет GPL
Интерактивный C Институт практической робототехники KISS Windows, Unix, Mac, Linux , IRIX, Solaris, SunOS Нет Бесплатное ПО
LabWindows/CVI National Instruments Windows,Unix и другие Да Проприетарное
lcc Крис Фрейзер и Дэвид Хэнсон Windows, Unix и другие только Windows Freewar e (исходный код доступен для некоммерческого использования)
Mark Williams C Mark Williams Company Windows, Other Да Проприетарное
Microsoft C Microsoft Windows Да Запатентовано
Nwcc Нильс Веллер Windows,Unix,Другое Нет BSD
Open64 SGI Google HP Intel Nvidia PathScale Университет Цинхуа и другие Unix,Другое Нет GPL
Pelles C Pelle Orinius Windows Да Бесплатное ПО
PGCC The Portland Group Windows,Unix,Другое — Mac OS X Да — Visual Studio для Windows Проприетарное
Портативный компилятор C Андерс Магнуссон и другие Windows,Unix,Другие Нет BSD
Power C Mix Software Другое Нет Проприетарное
QuickC Microsoft Windows Да Запатентовано
SAS/C SAS Institute Windows, Unix, Other-IBM mainframe, AmigaOS, 68K, 88K, Unix Да Запатентовано
Tiny C Compiler Фабрис Беллард Windows,Unix Нет LGPL
Turbo C Embarcadero Другое Нет Проприетарная собственность — V 2.01 находится в свободном доступе
Компилятор CCS C CCS, Inc. Windows, Unix,Другое Да Проприетарное
Компилятор MikroC MikroElektronika, Inc. Windows,Unix,Другое Да Проприетарное
отладчик ups[1] (включает интерпретатор C) Том Хьюз, Ян Эдвардс и другие Unix, Other-Solaris, SunOS Да GPL
VBCC Dr. Volker Barthelmann Windows,Unix,Other Нет Бесплатное ПО (исходный код доступен, модификация запрещена)
XL C IBM Unix-AIX Eclipse Проприетарно

Назад: Учебное пособие по C
Следующее: C Basic

Поделитесь этим учебным пособием/упражнением на: Facebook и Twitter

Программирование на C: советы дня

Программирование на C. Почему ENOENT означает "Нет такого файла или каталога"?

Это сокращение от Error NO ENTry (или Error NO ENTity), и на самом деле его можно использовать не только для файлов/каталогов.

Это сокращение, потому что компиляторы C на заре времен не поддерживали более 8 символов в символах.

Чтобы скомпилировать и запустить программу на языке C, вам понадобится компилятор C. Компилятор — это программное обеспечение, которое используется для компиляции и выполнения программ. Есть два способа установить компилятор языка C на вашем компьютере/ноутбуке:

Загрузите полноценную интегрированную среду разработки, например Turbo C++, Microsoft Visual C++ или DevC++, которая поставляется вместе с компилятором языка C.

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

Если вы еще не установили IDE для языка C, следуйте этому пошаговому руководству по установке Turbo C++ для языка C

Использование IDE — Turbo C

Мы рекомендуем вам использовать Turbo C или Turbo C++ IDE, которая является самой старой IDE для программирования на языке C. Он находится в свободном доступе в Интернете и подходит для начинающих.

Шаг 1. Откройте IDE turbo C (интегрированную среду разработки), нажмите «Файл», а затем нажмите «Создать».

После того, как вы загрузили и установили компилятор gcc, все, что вам нужно сделать, это открыть любой текстовый редактор, скопировать и вставить код программы C для C Hello World Program и сохранить его под именем helloworld.c, как и любой другой. другой файл, который вы сохраняете под именем.

Теперь откройте командную строку или терминал (если вы используете Ubuntu или Mac OS) и перейдите в каталог, в котором вы сохранили программный файл helloworld.c.

Введите команду gcc hello.c, чтобы скомпилировать код. Это скомпилирует код, и, если ошибок нет, он создаст выходной файл с именем a.out(имя по умолчанию)

Теперь, чтобы запустить программу, введите ./a.out, и вы увидите на экране Hello, World.

Разница между компиляцией и запуском в C?

Вы должны подумать, почему это двухэтапный процесс: сначала мы компилируем код, а затем запускаем его. Мы сделали то же самое с Turbo C, а также с командной строкой или терминалом.

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

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

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

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

Часто задаваемые вопросы (FAQ)

1. Что вы понимаете под процессом компиляции?

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

2. Назовите ключи, используемые в Turbo C для компиляции кода.

ALT + F9 используется в Turbo C для компиляции кода.

3. Как выполняется программа на C?

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

4. Где я могу написать и запустить программу C?

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

Шаг 1. Откройте IDE turbo C (интегрированную среду разработки), нажмите «Файл», а затем нажмите «Создать».

Шаг 2. Напишите программный код C.

Шаг 3. Нажмите «Компилировать» или нажмите Alt + F9, чтобы скомпилировать код.

Шаг 4. Нажмите «Выполнить» или нажмите Ctrl + F9, чтобы запустить код.

Шаг 5: Turbo C откроет консоль, чтобы показать вам результат работы программы.

Заключение

Это руководство посвящено тому, как запускать и компилировать любую программу на языке C, используя имя IDE Turbo C. Мы также рассмотрели, как это можно сделать без использования какой-либо IDE.

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