Библиотека knigago >> Компьютеры: Языки и системы программирования >> C, C++, C# >> Язык С в XXI веке

Бен Клеменс - Язык С в XXI веке

Язык С в XXI веке
Книга - Язык С в XXI веке.  Бен Клеменс  - прочитать полностью в библиотеке КнигаГо
Название:
Язык С в XXI веке
Бен Клеменс

Жанр:

Учебники и самоучители по компьютеру, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), C, C++, C#

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

978-5-97060-101-3

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Язык С в XXI веке"

Язык C - не просто фундамент всех современных языков программирования, он и сам - современный язык, идеальный для написания эффективных приложений передового уровня. Последние 20 лет C не стоял на месте. Сам язык и окружающая его экосистема подвергаются пересмотру. Эта книга начинается там, где другие заканчиваются. В ней рассказано, как изменилась функциональность, поддерживаемая любым компилятором, благодаря двум новым стандартам C, вышедшим со времен оригинального ANSI. Цель книги - рассмотреть то, чего нет в других учебниках по C: инструменты и окружение; библиотеки для работы со связанными списками и анализаторами XML; написание удобочитаемого кода с дружественным программным интерфейсом. Издание предназначено для программистов, имеющих опыт работы на каком-либо языке и обладающими базовыми знаниями о С.


Читаем онлайн "Язык С в XXI веке" (ознакомительный отрывок). Главная страница.

ЗЬI

Бен /(;zеменс

.&е.

O'REILLY®

Бен Клеменс

�3ЫI< С в XXI ве1 / / p r i n t f
int ma i n ( ) {
p r i n t f ( "The i n tegral o f а Norma l ( O , 1 ) d i s t r ib u t i o n "
"between - 1 . 9 6 and 1 . 9 6 i s : % g \ n " , e r f ( l . 9 6 * s q r t ( l / 2 . ) ) ) ;

Директивы # i n c lude должны быть вам знакомы. Компилятор вставляет вместо
них содержимое файлов math.h и stdio.h соответственно, а следовательно, и объ­
явления функций printf, e r f и sqrt. Объявление в math.h ничего не говорит о том,
что делает функция erf, известно лишь, что она принимает параметр типа douЫe и
возвращает значение типа dоиЬ/е. Этой информации компилятору достаточно для
проверки правильности использования и создания объектного файла, в котором
оставлено сообщение компьютеру: когда дойдешь до этого места, найди функцию
erf и подставь сюда возвращаемое ей значение.
Отреагировать на это сообщение должен компоновщик, который и производит
поиск функции e r f в библиотеке, находящейся где-то на диске.
Математические функции, объявленные в заголовке math . h, живут в отдельной
библиотеке, и компоновщику необходимо сказать об этом с помощью флага -lm.
Здесь -1 означает, что необходимо прикомпоновать библиотеку, имя которой в дан-

32

•:•

Часть 1. Окружение

ном случае состоит всего из одной буквы m. Функцию printf мы получаем задаром,
потому что при вызове компилятора неявно подразумевается, что в самом конце
команды указан флаг -lc, требующий от компоновщика добавить стандартную биб­
лиотеку libc. Позже мы увидим, что библиотека GLib 2.0 компонуется с помощью
флага -lglib-2 . О, библиотека GNU Scientific Library с помощью флага -lgsl и т. д.
Таким образом, если файл называется erf.c, то полная команда вызова КОl\ШИ­
лятора gcc с несколькими дополнительными флагами, которые мы обсудим ниже,
В Ы ГЛЯДИТ так:
-

gcc e r f . c



e r f - lm -g -Wa l l -03 - s td=gnu l l

Итак, с помощью директивы # include в тексте программы м ы попросили ком­
пилятор включить математические функции, а с помощью флага - lm в командной
строке попросили компоновщик прикомпоновать математическую библиотеку.
Флаг - о задает имя выходного файла, без него мы по умолчанию получили бы
исполняемый файл с именем а . out.

Н ескол ько моих любим ых флагов
Как вы скоро увидите, я всегда указываю несколько флагов комп илятора и вам
советую поступать так же.
О -g
включить отладочные символы. Без этого флага отладчик не покажет
вам имена переменных и функций. Наличие отладочных символов не за­
медляет работу программы, а то, что файл станет на килобайт больше, не­
существенно, поэтому нет никаких причин не пользоваться ими. Этот флаг
понимают gcc, Clang и icc ( Intel С Compiler).
О -std=gnu l l
этот флаг понимают clang и gcc, он означает, что комнилятор
должен разрешать код, совместимый со стандартами С 1 1 и POSIX (а также
некоторые расширения GNU). На момент написания данной книги clang по
умолчанию подразумевает стандарт С99, а gcc стандарт С89. Если у вас
стоит версия gcc, clang или icc, предшествующая выходу стандарта С 1 1 , за­
давайте флаг - std=gnu 99, чтобы работать на уровне С99. Стандарт POSIX
требует, чтобы в системе присутствовал компилятор с99, поэтому нс содер­
жащая версии стандарта командная строка для компиляции кода, совмести­
мого с С99, имеет вид:
-

-

-

с99 erf . c



e r f -lm -g -Wa l l -03

В показанных ниже файлах makefile я достигаю того же эффекта, установив
переменную СС=с 99.
В зависимости о т года вып уска Мае с 9 9 может быть специально подправленной версией
gcc, а это , возможно , не то , что вам нужно . Если ваша версия с 9 9 падает при задании флага
-Wa l l или такой программы вообще нет, сделайте свою собственн у ю версию. В файл ини­
циализации оболочки (скорее всего , . bashrc) добавьте псевдони м

alias c 9 9= " gcc - - s td=c 9 9 "
или

alias c99=" clang"
к а к в а м больше нравитс я .

Г/\сЗ ва 1. На страиваем среду д/\>� компиАшии
О

О

( ·- )
\ /

•:•

33

-03 - задает уровень оптимизации 3, при котором компилятор делает все
возможное для построения более быстрого кода. Если при работе с отлад­
чиком оказывается, что из-за оптимизации исчезло слишком много пере­
менных и стало трудно следить за тем, что происходит, то задайте флаг -00.
Ниже мы увидим стандартный способ сделать это с помощью переменной
CFLAGS. Флаг понимают gcc, Clang и icc.
W all - выводить все предупреждения компилятора. Годится для gcc, Clang
и icc. В случае icc предпочтительнее флаг -wl, который задает режим вывода
предупреждений компилятора, --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.