Главная
страница 1 ... страница 21страница 22страница 23страница 24

B6. Диагностика:

Макрос assert используется для включения в программу диагностических сообщений.

void assert (int выражение)

Если выражение имеет значение нуль, то

assert (выражение)

напечатает в stderr сообщение следующего вида:

Assertion failed: выражение, file имя-файла, line nnn

после чего будет вызвана функция abort, которая завершит вычисления. Имя исходного файла и номер строки будут взяты из макросов __FILE__ и __LINE__.

Если в момент включения файла было определено имя NDEBUG, то макрос assert игнорируется.



B7. Списки аргументов переменной длины:

Заголовочный файл предоставляет средства для перебора аргументов функции, количество и типы которых заранее не известны. Пусть lastarg - последний именованный параметр функции f с переменным числом аргументов. Внутри f объявляется переменная ap типа va_list, предназначенная для хранения указателя на очередной аргумент:

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 имеет значение SIG_DFL, то используется зависимая от реализации "обработка по умолчанию"; если значение handler равно SIG_IGN, то сигнал игнорируется; в остальных случаях будет выполнено обращение к функции, на которую указывает handler с типом сигнала в качестве аргумента. В число допустимых видов сигналов входят:

SIGABRT

- аварийное завершение, например от abort;

SIGFPE

- арифметическая ошибка: деление на 0 или переполнение;

SIGILL

- неверный код функции (недопустимая команда);

SIGINT

- запрос на взаимодействие, например прерывание;

SIGSEGV

- неверный доступ к памяти, например выход за границы;

SIGTERM

- требование завершения, посланное в программу.

signal возвращает предыдущее значение handler в случае специфицированного сигнала, или SIGERR в случае возникновения ошибки.

Когда в дальнейшем появляется сигнал sig, сначала восстанавливается готовность поведения "по умолчанию", после чего вызывается функция, заданная в параметре handler, т.е. как бы выполняется вызов (*handler)(sig). Если функция handler вернет управление назад, то вычисления возобновятся с того места, где застал программу пришедший сигнал. Начальное состояние сигналов зависит от реализации.

int raise(int sig)

raise посылает в программу сигнал sig. В случае неудачи возвращает ненулевое значение.



B10. Функции даты и времени:

Заголовочный файл объявляет типы и функции, связанные с датой и временем. Некоторые функции имеют дело с местным временем, которое может отличаться от календарного, например в связи с зонированием времени. Типы clосk_t и time_t - арифметические типы для представления времени, a struct tm содержит компоненты календарного времени:

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)

clock возвращает время, фиксируемое процессором от начала выполнения программы, или -1, если оно не известно. Для выражения этого времени в секундах применяется формула clock()/CLOCKS_PER_SEC.

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)

asctime переводит время в структуре *tp в строку вида

Sun Jan 3 15:14:13 1988\n\0

char *ctime(const time_t *tp)

ctime переводит календарное время в местное, что эквивалентно выполнению asctime(localtime(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.



%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. Зависящие от реализации пределы: и

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



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






<< предыдущая страница  
Смотрите также:
Б. Керниган, Д. Ритчи Язык программирования Си Издание 3-е, исправленное Перевод с английского под редакцией Вс. С. Штаркмана Невский Диалект, Санкт-Петербург 2001
3942.83kb.
24 стр.
Шарп Перевод на русский язык под общей редакцией В. Зеленского Санкт-Петербург Б. С. К
2473.89kb.
10 стр.
Как запад стал богатым
5224.01kb.
30 стр.
Сведения о квалификации педагогических кадров
1227.17kb.
5 стр.
Тактика штурмовой авиации
1780.85kb.
12 стр.
Правила написания и оформления дипломных работ издание 3-е, исправленное и дополненное
840.67kb.
6 стр.
Николе М., Шварц Р. Н 63 Семейная терапия. Концепции и методы/Пер, с англ. О. Очкур, А. Шишко
3577.21kb.
23 стр.
Издание 3-е, исправленное Научный редактор издания профессор В. В. Целищев сибирское университетское издательство новосибирского университета новосибирск 2001
12957.91kb.
60 стр.
Сильвия Крэнстон при участии Кэри Уильямс Жизнь и творчество основательницы современного теософского движения Блаватской е. П. Перевод с английского под редакцией
8089.17kb.
47 стр.
Проблемы здоровья и экологии
3773.97kb.
37 стр.
Санкт-Петербург Москва • Харьков • Минск 2001
144.58kb.
1 стр.
Поэтический художественный перевод с английского языка на русский язык: Томас Харди. Thomas Hardy. His Immortality
7.24kb.
1 стр.