Язык программирования Си. Издание 3-е, исправленное — страница 65 из 69

местное представление даты и времени%dдень месяца (01-31) %Hчас (24-часовое время) (00-23) %Iчас (12-часовое время) (01-12) %jдень от начала года (001-366) %mмесяц (01-12) %Mминута (00-59) %pместное представление AM или РМ (до или после полудня) %Sсекунда (00-61) %Uнеделя от начала года (считая, что воскресенье - 1-й день недели) (00-53) %wдень недели (0-6, номер воскресенья - 0) %Wнеделя от начала года (считая, что понедельник - 1-й день недели) (00-53)%xместное представление даты%Xместное представление времени%yгод без указания века (00-99) %Yгод с указанием века%Zназвание временной зоны, если она есть%%%

B11. Зависящие от реализации пределы: и

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

CHAR_BIT8битов в значении char
SCHAR_MAXUCHAR_MAX или SCHAR_MAXмаксимальное значение char
CHAR_MIN0 или SCHAR_MINминимальное значение char
INT_MAX+32767максимальное значение int
INT_MIN-32767 (I.B.:обычно это значение -32768)минимальное значение int
LONG_MAX+2147463647максимальное значение long
LONG_MIN-2147483647 (I.B.:обычно это значение -2147483648)минимальное значение long
SCHAR_MAX+127максимальное значение signed char
SCHAR_MIN-127 (I.B.:обычно это значение -128)минимальное значение signed char
SHRT_MAX+32767максимальное значение short
SHRT_MIN-32767 (I.B.:обычно это значение -32768)минимальное значение short
UCHAR_MAX255максимальное значение unsigned char
UINT_MAX65535максимальное значение unsigned int
ULONG_MAX4294967295максимальное значение unsigned long
USHRT_MAX65535максимальное значение unsigned short

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

FLT_RADIX2основание для представления порядка, например: 2, 16
FLT_ROUNDSспособ округления при сложении чисел с плавающей точкой
FLT_DIG6количество верных десятичных цифр
FLT_EPSILON1E-5минимальное х, такое, что 1.0 + х != 1.0
FLT_MANT_DIGколичество цифр по основанию FLT_RADIX в мантиссе
FLT_MAX1E+37максимальное число с плавающей точкой
FLT_MAX_EXPмаксимальное n, такое, что FLT_RADIXn-1 представимо
FLT_MIN1E-37минимальное нормализованное число с плавающей точкой
FLT_MIN_EXPминимальное n, такое, что 10n представимо в виде нормализованного числа
DBL_DIG10количество верных десятичных цифр для типа double
DBL_EPSILON1E-9минимальное х, такое, что 1.0 + x != 1.0, где x принадлежит типу double
DBL_MANT_DIGколичество цифр по основанию FLT_RADIX в мантиссе для чисел типа double
DBL_MAX1E+37максимальное число с плавающей точкой типа double
DBL_MAX_EXPмаксимальное n, такое, что FLT_RADIXn-1 представимо в виде числа типа double
DBL_MIN1E-37минимальное нормализованное число с плавающей точкой типа double
DBL_MIN_EXPминимальное n, такое, что 10n представимо в виде нормализованного числа типа double

Приложение C. Перечень изменений

С момента публикации первого издания этой книги определение языка Си претерпело изменения. Почти все нововведения - это расширения исходной версии языка, выполненные так, чтобы сохранилась совместимость с существующими программами; некоторые изменения касаются устранения двусмысленностей первоначального описания, а некоторые представляют собой модификации, привнесенные существующей практикой. Многие из новых возможностей, впоследствии принятые другими разработчиками Си-компиляторов, были первоначально объявлены в документах, прилагаемых к компиляторам. Комитет ANSI, подготавливая стандарт языка, включил большинство этих изменений, а также ввел другие значительные модификации. Некоторые коммерческие компиляторы реализовали их еще до выпуска официального Си-стандарта.

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

• В стандарте более тщательно, по сравнению с первым изданием, определено и расширено препроцессирование: в его основу явно положены лексемы; введены новые операторы для "склеивания" лексем (##) и создания символьных строк (#), а также новые управляющие строки, такие как #elif и #pragma; разрешено повторное определение макроса с той же последовательностью лексем; отменена подстановка параметров внутри строк. Разрешено "склеивание" строк с помощью знака \ в любом месте, не только в строках и макроопределениях (см. A.12).

• Минимальное число значимых символов всех внутренних идентификаторов доведено до 31; для идентификаторов с внешней связью оно остается равным 6; буквы нижнего и верхнего регистров не различаются. (Многие реализации допускают большее число значимых символов.)

• Для знаков #, \, ^, [, ], {, }, |, ~, которых может не быть в некоторых наборах символов, введены трехзнаковые последовательности, начинающиеся с ?? (см. A12.1). Следует заметить, что введение трехзнаковых последовательностей может повредить значения строк, в которых содержатся ??.

• Введены новые ключевые слова (void, const, volatile, signed, enum), а мертворожденное слово entry из обращения изъято.

 • Для символьных констант и строковых литералов определены новые эскейп-последовательности. Объявлено, что появление за \ символов не из принятых эскейп-последовательностей приводит к непредсказуемому результату (см. A2.5.2.).

• Узаконено полюбившееся всем тривиальное изменение: 8 и 9 не являются восьмеричными цифрами.

• Введен расширенный набор суффиксов для явного указания типов констант: U и L - для целых и F и L - для типов с плавающей точкой. Уточнены также правила определения типа для констант без суффиксов (A2.5).

• Объявлено, что соседние строки конкатенируются.

• Предоставлены средства, позволяющие записывать строковые литералы и символьные константы из расширенного набора символов (A2.6).

• Объекты типа char (как и объекты другого типа) можно специфицировать явно со знаком или без знака. Исключается использование словосочетания long float в смысле double, но вводится тип long double для чисел с плавающей точкой повышенной точности.

• С некоторых пор доступен тип unsigned char. Стандарт вводит ключевое слово signed для явного указания, что объект типа char или другого целочисленного типа имеет знак.

• Уже несколько лет в большинстве реализаций доступен тип void. Стандарт вводит void * в качестве типа обобщенного указателя; раньше для этой цели использовали char *. Одновременно вступают в силу правила, по которым запрещается без преобразования типа "смешивать" указатели и целые или указатели разных типов.

• Стандарт устанавливает минимальные пределы диапазонов арифметических типов, предусматривает заголовочные файлы