Книга: Основы программирования в Linux
Компилятор языка С
Компилятор языка С
В системах, соответствующих стандарту POSIX, компилятор языка С называется с89. Раньше компилятор языка С назывался просто сс. Шли годы, разные поставщики продавали UNIX-подобные системы с компиляторами С, обладающими разными функциями и параметрами, но очень часто все также названными сс.
Когда создавался стандарт POSIX, выяснилось, что невозможно определить стандартную команду cc
, которая была бы совместима со всеми этими разработками.
Вместо этого комитет решил создать новую стандартную команду для компилятора языка С — с89
. Если эта команда представлена, она всегда использует одни и те же опции независимо от машины.
В системах Linux, которые на деле пытаются следовать стандартам, можно обнаружить, что все или некоторые из команд с89
, cc
и gcc
ссылаются на системный компилятор языка С, обычно компилятор GNU С или gcc. В системах UNIX компилятор языка С почти всегда называется cc.
В этой книге мы используем gcc, поскольку он поставляется в дистрибутивах Linux и потому что он поддерживает для языка С синтаксис стандарта ANSI. Если когда-нибудь вы обнаружите, что в вашей системе нет gcc, мы советуем получить его и установить. Найти его вы можете по адресу http://www.gnu.org. Всюду, где мы используем в книге команду gcc
, просто заменяйте ее подходящей командой вашей системы.
Упражнение 1.1. Ваша первая Linux-программа на языке C
В этом примере вы начнете разработку в ОС Linux с помощью языка С, написав, откомпилировав и выполнив свою первую Linux-программу. Ею, кстати, может стать самая известная из всех программ для начинающих — программа, выводящая сообщение "Hello World" ("Привет, мир").
1. Далее приводится текст файла hello.c:
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello Worldn");
exit(0);
}
2. Теперь откомпилируйте, скомпонуйте и выполните вашу программу.
$ gcc -о hello.c $ ./hello
Hello World
Как это работает
Вы запустили компилятор GNU С (в Linux, вероятнее всего, он будет доступен и как cc
), который оттранслировал исходный код на языке С в исполняемый файл, названный hello. Вы выполнили программу, и она вывела на экран приветствие. Это наипростейший из существующих примеров, но если вы смогли с помощью вашей системы добраться до этого места, то сможете откомпилировать и выполнить и остальные примеры из книги. Если же программа не сработала, убедитесь в том, что в вашей системе установлен компилятор языка С. Например, во многих дистрибутивах Linux есть установочная опция, названная Software Development (Разработка ПО) (или что-то похожее), которую следует выбрать для установки необходимых пакетов.
Поскольку это первая выполненная вами программа, самое время обратить внимание на некоторые основные положения. Программа hello, вероятно, должна быть в вашем исходном каталоге. Если в переменную PATH
не включена ссылка на ваш исходный каталог, оболочка не сможет найти программу hello. Более того, если один из каталогов в переменной PATH
содержит другую программу, названную hello, вместо вашей будет выполнена эта программа. То же самое произойдет, если такой каталог упомянут в переменной path раньше вашего исходного каталога. Для решения этой потенциальной проблемы можно снабдить имена программ префиксом ./
(например, ./hello
). Данный префикс сообщает оболочке о необходимости выполнить программу с заданным именем, находящуюся в текущем каталоге. (Точка — это условное название текущего каталога.)
Если вы забыли опцию -o name
, которая указывает компилятору, куда поместить исполняемый файл, компилятор поместит его в файл с именем a.out (что означает ассемблерный вывод). Не забудьте поискать файл с именем a.out, если вы уверены, что скомпилировали программу, а найти ее не можете! Когда ОС UNIX только появилась, пользователи, хотевшие играть в ней в игры, часто запускали их как файл с именем a.out, чтобы не быть пойманными системным администратором, и некоторые установки ОС UNIX традиционно удаляют каждый вечер все файлы с именем a.out.
- Фактические аргументы
- 1.3. Стандартный С против оригинального С
- Синтаксис языка Bourne shell
- Компилятор GNU С
- 3.14. Особенности компилятора и ассемблера
- ДОСТОИНСТВА ЯЗЫКА СИ
- Указания компилятору языка Си
- Реализация языка SQL
- Дальнейшее развитие языка SQL
- 1. Оператор Select – базовый оператор языка структурированных запросов
- 13. Лекция: Интеграция Python с другими языками программирования.
- Джон Маккарти Отец искусственного интеллекта, автор языка LISP