Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций1+2.doc
Скачиваний:
29
Добавлен:
27.05.2015
Размер:
143.87 Кб
Скачать

Текст после препроцессора

……….

if (r>0.0)/* Сравнение с константой ZERO * / /* Длина окружности радиуса r: * / D=2*3.141593*r;

……….

Рис. 1.1. Обработка текста программы препроцессором

Имена РI и ZERO (см. рис. 1.1) после работы препроцессора заменены в тексте программы на определенные в двух директивах #define значения (3.141593 и 0.0).

Обратите внимание, что подстановка не выполняется в ком­ментариях и в строковых константах. В примере на рис. 1.1 идентификатор ZERO остался без изменений в комментарии (/* Сравнение с константой ZERO */).

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

FLT _МАХ - максимальное число с плавающей точкой типа f1oat;

CНAR_BIT - количество битов в байте;

Int_min - минимальное значение для данных типа int.

Чтобы использовать в программе указанные именованные препроцессорные константы, недостаточно записать их имена в программе. Предварительно в текст программы необходимо включить препроцессорную директиву такого вида:

#include <имя _заголовочного_файла>

где в качестве имени_заголовочного_файла подставляются:

limits.h - для данных целых типов;

f1oat.h - для вещественных данных.

В заголовочный файл limits.h авторы компилятора помести­ли набор препроцессорных директив, среди которых есть такие:

#define CНAR_BIT 8

#define SНRT_МАХ 0x7FFF

#define LONG_МАХ Ox7FFFFFFFL

В заголовочном файле float.h находятся директивы, опреде­ляющие константы, связанные с представлением данных веще­ственных типов. Например:

#define FLT_МIN 1.17549435E-38F

#define DBL_МIN2.2250738585072014Е-308

#define DBL_EPSILON 2.22044БО492503131Е- l6

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

#include <limits.h>

можно использовать в программе стандартные именованные константы CНAR_ВIT, SНRT_МIN и т.д., а уж их значениями - будут те числа, которые включили в дирек­тивы #define авторы конкретного компилятора и конкретной библиотеки.

Если включить в программу директиву

#include <float.h>

то станут доступными именованные константы предельных значений числовых данных вещественных типов.

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

16