Язык программирования Си. Издание 3-е, исправленное
Шрифт:
time возвращает текущее календарное время (т. е. время, прошедшее после определенной даты, - обычно после 0 ч 00 мин 00 с GMT 1-го января 1970 г.
– примеч. ред.) или -1, если время не известно. Если tp не равно NULL, то возвращаемое значение записывается и в *tp.
difftime возвращает разность time2 - time1, выраженную в секундах.
mktime преобразует местное время, заданное структурой *tp, в календарное, выдавая его в том же виде, что и функция time. Компоненты будут иметь значения в указанных диапазонах. Функция mktime возвращает календарное время или -1, если оно не представимо.
Следующие четыре функции возвращают указатели на статические объекты, каждый из которых может быть изменен другими вызовами.
asctime переводит время в структуре *tp в строку вида
ctime
gmtime переводит календарное время во Всемирное координированное время (Coordinated Universal Time - UTC). Выдаст NULL, если UTC не известно. Имя этой функции, gmtime, происходит от Greenwich Mean Time (среднее время по Гринвичскому меридиану).
localtime переводит календарное время *tp в местное.
strftime форматирует информацию о дате и времени из *tp в строку s согласно формату fmt, который имеет много общих черт с форматом, задаваемым в функции printf. Обычные символы (включая и завершающий символ '\0') копируются в s. Каждая пара, состоящая из % и буквы, заменяется, как показано ниже, с использованием значений по форме, соответствующей местным традициям. В s размещается не более smax символов; strftime возвращает число символов без учета '\0' или нуль, если число сгенерированных символов больше smax.
%a | сокращенное название дня недели |
%A | полное название дня недели |
%b | сокращенное название месяца |
%B | полное название месяца |
%c | местное представление даты и времени |
%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. Зависящие от реализации пределы: <limits.h> и <float.h>
Заголовочный файл <limits.h> определяет константы для размеров целочисленных типов. Ниже перечислены минимальные приемлемые величины, но в конкретных реализациях могут использоваться и большие значения.
CHAR_BIT | 8 | битов в значении char |
SCHAR_MAX | UCHAR_MAX или SCHAR_MAX | максимальное значение char |
CHAR_MIN | 0 или 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 | максимальное
|
SHRT_MIN | – 32767 (I.B.:обычно это значение -32768) | минимальное значение short |
UCHAR_MAX | 255 | максимальное значение unsigned char |
UINT_MAX | 65535 | максимальное значение unsigned int |
ULONG_MAX | 4294967295 | максимальное значение unsigned long |
USHRT_MAX | 65535 | максимальное значение unsigned short |
Имена, приведенные в следующей таблице, взяты из <float.h> и являются константами, имеющими отношение к арифметике с плавающей точкой. Значения (если они есть) представляют собой минимальные значения для соответствующих величин. В каждой реализации устанавливаются свои значения.
FLT_RADIX | 2 | основание для представления порядка, например: 2, 16 |
FLT_ROUNDS | способ округления при сложении чисел с плавающей точкой | |
FLT_DIG | 6 | количество верных десятичных цифр |
FLT_EPSILON | 1E-5 | минимальное х, такое, что 1.0 + х != 1.0 |
FLT_MANT_DIG | количество цифр по основанию FLT_RADIX в мантиссе | |
FLT_MAX | 1E+37 | максимальное число с плавающей точкой |
FLT_MAX_EXP | максимальное n, такое, что FLT_RADIXn– 1 представимо | |
FLT_MIN | 1E-37 | минимальное нормализованное число с плавающей точкой |
FLT_MIN_EXP | минимальное n, такое, что 10n представимо в виде нормализованного числа | |
DBL_DIG | 10 | количество верных десятичных цифр для типа double |
DBL_EPSILON | 1E-9 | минимальное х, такое, что 1.0 + x != 1.0, где x принадлежит типу double |
DBL_MANT_DIG | количество цифр по основанию FLT_RADIX в мантиссе для чисел типа double | |
DBL_MAX | 1E+37 | максимальное число с плавающей точкой типа double |
DBL_MAX_EXP | максимальное n, такое, что FLT_RADIXn– 1 представимо в виде числа типа double | |
DBL_MIN | 1E-37 | минимальное нормализованное число с плавающей точкой типа double |
DBL_MIN_EXP | минимальное n, такое, что 10n представимо в виде нормализованного числа типа double |
Приложение C. Перечень изменений
С момента публикации первого издания этой книги определение языка Си претерпело изменения. Почти все нововведения - это расширения исходной версии языка, выполненные так, чтобы сохранилась совместимость с существующими программами; некоторые изменения касаются устранения двусмысленностей первоначального описания, а некоторые представляют собой модификации, привнесенные существующей практикой. Многие из новых возможностей, впоследствии принятые другими разработчиками Си-компиляторов, были первоначально объявлены в документах, прилагаемых к компиляторам. Комитет ANSI, подготавливая стандарт языка, включил большинство этих изменений, а также ввел другие значительные модификации. Некоторые коммерческие компиляторы реализовали их еще до выпуска официального Си-стандарта.
В этом приложении сведены воедино различия между языком, определенным в первой его редакции, и той его версии, которая принята в качестве стандарта. Здесь рассматривается только сам язык; вопросы, относящиеся к его окружению и библиотеке, не затрагиваются. Хотя последние и являются важной частью стандарта, но, поскольку в первом издании не делалось попытки описать среду и библиотеку, с соответствующими стандартными элементами сравнивать практически нечего.
• В стандарте более тщательно, по сравнению с первым изданием, определено и расширено препроцессирование: в его основу явно положены лексемы; введены новые операторы для "склеивания" лексем (##) и создания символьных строк (#), а также новые управляющие строки, такие как #elif и #pragma; разрешено повторное определение макроса с той же последовательностью лексем; отменена подстановка параметров внутри строк. Разрешено "склеивание" строк с помощью знака \ в любом месте, не только в строках и макроопределениях (см. A.12).
• Минимальное число значимых символов всех внутренних идентификаторов доведено до 31; для идентификаторов с внешней связью оно остается равным 6; буквы нижнего и верхнего регистров не различаются. (Многие реализации допускают большее число значимых символов.)
• Для знаков #, \, ^, [, ], {, }, |, ~, которых может не быть в некоторых наборах символов, введены трехзнаковые последовательности, начинающиеся с ?? (см. A12.1). Следует заметить, что введение трехзнаковых последовательностей может повредить значения строк, в которых содержатся ??.