Программирование для Linux. Профессиональный подход - [4]

Шрифт
Интервал

При создании исходного файла на языке С используйте расширения >.с или >.h. В случае C++ придерживайтесь расширений >.cpp, >.hpp, >.С или >.H. Когда файл будет открыт, введите нужный текст и сохраните результат, выбрав команду Save Buffer в меню Files. Чтобы выйти из редактора, воспользуйтесь командой Exit Emacs в меню Files.

Те, кто испытывают раздражение от необходимости постоянно щелкать мышью, могут воспользоваться клавиатурными сокращениями, ускоряющими открытие и сохранение файлов, а также выход из редактора. Операции открытия файла соответствует сокращение >C-x C-f. (Запись >C-x означает нажатие клавиши с последующим нажатием клавиши .) Чтобы сохранить файл, введите >C-x C-s, а чтобы выйти из Emacs — >C-x C-c. Лучше узнать о возможностях редактора можно с помощью встроенного учебника, доступного через команду Emacs Tutorial в меню Help. В нем приведено множество советов, которые помогут пользователям научиться эффективнее работать с Emacs.

1.1.2. Автоматическое форматирование

Программисты, привыкшие работать в интегрированной среде разработки, оценят имеющиеся в Emacs средства автоматического форматирования кода. При открытии исходного файла, написанного на C/C++, редактор самостоятельно определяет наличие в нем программного кода, а не просто текста. Если нажать клавишу в пустой строке, редактор переместит курсор в нужную позицию, определяемую положением предыдущей строки. Когда клавиша нажимается в строке, содержащей какой-то текст, сдвигается вся строка. Предположим, к примеру, что набран такой текст:

>int main() {

>printf("Hello, world\n");

>}

Нажатие клавиши в строке вызова функции >printf() приведет к следующему результату:

>int main() {

>  printf("Hello, world\n");

>}

По мере работы с редактором Emacs читатели изучат и другие средства форматирования. Особенность редактора заключается в том. что он позволяет программировать практически любые операции, связанные с автоматическим форматированием. Благодаря этому были реализованы режимы редактирования множества видов документов, разработаны игры[3] и даже СУБД.

1.1.3. Синтаксические выделения

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

Чтобы включить режим цветовых выделений, откройте файл >~/.emacs и вставьте в него такую строку:

>(global-font-lock-mode t)

Сохраните файл, выйдите из Emacs и перезапустите редактор. Теперь можете открыть нужный исходный файл и наслаждаться!

Внимательные читатели, возможно, обратили внимание на то, что строка, вставленная в файл >.emacs, выглядит написанной на языке LISP. Это и есть LISP! Большая часть редактора Emacs реализована именно на этом языке. На нем же можно писать расширения к редактору.

1.2. Компиляторы GCC

Компилятор превращает исходный текст программы, понятный человеку, в объектный код. исполняемый компьютером. Компиляторы, доступные в Linux-системах, являются честью коллекции GNU-компиляторов, известной как GCC (GNU Compiler Collection).[4] В нее входят компиляторы языков С, C++, Java, Objective-C, Fortran и Chill. В этой книге нас будут интересовать лишь первые два.

Предположим, имеется проект, в который входят два исходных файла: один написан на С (>main.c; листинг 1.1), а другой — на C++ (>reciprocal.cpp; листинг 1.2). После компиляции оба файла компонуются вместе, образуя программу >reciprocal,[5] которая вычисляет обратное заданного целого числа.

Листинг 1.1. (main.c) Исходный файл на языке С

>#include

>#include "reciprocal.hpp"


>int main(int argc, char **argv) {

> int i;

> i = atoi(argv[1]);

> printf("The reciprocal of %d is %g\n", i, reciprocal(i));

> return 0;

>}

Листинг 1.2. (reciprocal.cpp) Исходный файл на языке C++

>#include

>#include "reciprocal.hpp"


>double reciprocal (int i) {

> // Аргумент не должен быть равен нулю

> assert(i != 0);

> return 1.0/i;

>}

Есть также файл заголовков, который называется >reciprocal.hpp (листинг 1.3).

Листинг 1.3. (reciprocal.hpp) Файл заголовков

>#ifdef __cplusplus

>extern "С" {

>#endif


>extern double reciprocal(int i);


>#ifdef __cplusplus

>}

>#endif

Первый шаг заключается в превращении исходных файлов в объектный код.

1.2.1. Компиляция одного исходного файла

Компилятор языка С называется >gcc. При компиляции исходного файла нужно указывать опцию >-с. Вот как, например, в режиме командной строки компилируется файл >main.с:

>% gcc -с main.с

Полученный объектный файл будет называться >main.o.

Компилятор языка C++ называется >g++. Он работает почти так же, как и >gcc. Следующая команда предназначена для компиляции файла >reciprocal.cpp:

>% g++ -c reciprocal.cpp

Опция >-с говорит компилятору о необходимости получить на выходе объектный файл (он будет называться >reciprocal.o). Без неё компилятор >g++ попытается скомпоновать программу и создать исполняемый файл.

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


Рекомендуем почитать
Графика для Windows средствами DirectDraw

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


Виртуальная библиотека Delphi

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


Пишем драйвер Windows на ассемблере

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


Как писать драйвера

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


MFC и OpenGL

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


Информационная технология. Оценка программной продукции характеристики качества и руководства по их применению

Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»Information technology. Software product evaluation. Quality characteristics and guidelines for their use.