Главная Другое
Экономика Финансы Маркетинг Астрономия География Туризм Биология История Информатика Культура Математика Физика Философия Химия Банк Право Военное дело Бухгалтерия Журналистика Спорт Психология Литература Музыка Медицина |
страница 1 ... страница 21страница 22страница 23страница 24B6. Диагностика:
Макрос assert используется для включения в программу диагностических сообщений. void assert (int выражение) Если выражение имеет значение нуль, то assert (выражение) напечатает в stderr сообщение следующего вида: Assertion failed: выражение, file имя-файла, line nnn после чего будет вызвана функция abort, которая завершит вычисления. Имя исходного файла и номер строки будут взяты из макросов __FILE__ и __LINE__. Если в момент включения файла B7. Списки аргументов переменной длины:
Заголовочный файл va_list ар; Прежде чем будет возможен доступ к безымянным аргументам, необходимо один раз инициализировать ap, обратившись к макросу va_start: va_start(va_list ap, lastarg); С этого момента каждое обращение к макросу: type va_arg(va_list ap, type); будет давать значение очередного безымянного аргумента указанного типа, и каждое такое обращение будет вызывать автоматическое приращение указателя ap, чтобы последний указывал на следующий аргумент. Один раз после перебора аргументов, но до выхода из f необходимо обратиться к макросу void va_end(va_list ap);
B8. Дальние переходы:
Объявления в int setjmp(jmp_buf env); Макрос setjmp сохраняет текущую информацию о вызовах в env для последующего ее использования в longjmp. Возвращает нуль, если возврат осуществляется непосредственно из setjmp, и не нуль, если - от последующего вызова longjmp. Обращение к setjmp возможно только в определенных контекстах, в основном это проверки в if, switсh и циклах, причем только в простых выражениях отношения. if (setjmp() == 0) /* после прямого возврата */ else /* после возврата из longjmp */ void longjmp(jmp_buf env, int val); longjmp восстанавливает информацию, сохраненную в самом последнем вызове setjmp, по информации из env; выполнение программы возобновляется, как если бы функция setjmp только что отработала и вернула ненулевое значение val. Результат будет непредсказуемым, если в момент обращения к longjmp функция, содержащая вызов setjmp, уже "отработала" и осуществила возврат. Доступные ей объекты имеют те значения, которые они имели в момент обращения к longjmp; setjmp не сохраняет значений. ![]() B9. Сигналы:
Заголовочный файл void (*signal(int sig, void (*handler)(int)))(int)
signal возвращает предыдущее значение handler в случае специфицированного сигнала, или SIGERR в случае возникновения ошибки. Когда в дальнейшем появляется сигнал sig, сначала восстанавливается готовность поведения "по умолчанию", после чего вызывается функция, заданная в параметре handler, т.е. как бы выполняется вызов (*handler)(sig). Если функция handler вернет управление назад, то вычисления возобновятся с того места, где застал программу пришедший сигнал. Начальное состояние сигналов зависит от реализации. int raise(int sig)
B10. Функции даты и времени:
Заголовочный файл int tm_sec; - секунды от начала минуты (0,61); -- I.B.: все же наверно от 0 до 59 int tm_min; - минуты от начала часа (0,59); int tm_hour; - часы от полуночи (0,23); int tm_mday; - число месяца (1,31); int tm_mon; - месяцы с января(0,11); int tm_year; - годы с 1900; int tm_wday; - дни с воскресенья (0,6); int tm_yday; - дни с 1 января (0,365); int tm_isdst; - признак летнего времени. Значение tm_isdst - положительное, если время приходится на сезон, когда время суток сдвинуто на 1 час вперед, нуль в противном случае и отрицательное, если информация не доступна. clock_t clock(void)
time_t time(time_t *tp) time возвращает текущее календарное время (т. е. время, прошедшее после определенной даты, - обычно после 0 ч 00 мин 00 с GMT 1-го января 1970 г. - примеч. ред.) или -1, если время не известно. Если tp не равно NULL, то возвращаемое значение записывается и в *tp. double difftime(time_t time2, time_t time1) difftime возвращает разность time2 - time1, выраженную в секундах. time_t mktime(struct tm *tp) mktime преобразует местное время, заданное структурой *tp, в календарное, выдавая его в том же виде, что и функция time. Компоненты будут иметь значения в указанных диапазонах. Функция mktime возвращает календарное время или -1, если оно не представимо. Следующие четыре функции возвращают указатели на статические объекты, каждый из которых может быть изменен другими вызовами. char *asctime(const struct tm *tp)
Sun Jan 3 15:14:13 1988\n\0 char *ctime(const time_t *tp)
struct tm *gmtime(const time_t *tp) gmtime переводит календарное время во Всемирное координированное время (Coordinated Universal Time - UTC). Выдаст NULL, если UTC не известно. Имя этой функции, gmtime, происходит от Greenwich Mean Time (среднее время по Гринвичскому меридиану). struct tm *localtime(const time_t *tp) localtime переводит календарное время *tp в местное. size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp) strftime форматирует информацию о дате и времени из *tp в строку s согласно формату fmt, который имеет много общих черт с форматом, задаваемым в функции printf. Обычные символы (включая и завершающий символ '\0') копируются в s. Каждая пара, состоящая из % и буквы, заменяется, как показано ниже, с использованием значений по форме, соответствующей местным традициям. В s размещается не более smax символов; strftime возвращает число символов без учета '\0' или нуль, если число сгенерированных символов больше smax.
B11. Зависящие от реализации пределы:
|
CHAR_BIT |
8 |
битов в значении char |
SCHAR_MAX |
UCHAR_MAX или SCHAR_MAX |
максимальное значение char |
CHAR_MIN |
0 или CHAR_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_MAX |
255 |
максимальное значение unsigned char |
UINT_MAX |
65535 |
максимальное значение unsigned int |
ULONG_MAX |
4294967295 |
максимальное значение unsigned long |
USHRT_MAX |
65535 |
максимальное значение unsigned short |
FLT_RADIX |
2 |
основание для представления порядка, например: 2, 16 |
FLT_ ROUNDS |
способ округления при сложении чисел с плавающей точкой | |
FLT_DIG |
6 |
количество верных десятичных цифр |
FLT_EPSI ON |
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 |