Б. Керриган, Д. Ритчи Язык программирования C. Б. Керниган, Д. зык программирования и . Издание 3е, исправленное Перевод с английского под редакцией Вс. С. Штаркмана СанктПетербург 2003
Скачать 31.48 Mb.
|
321 char *strcpy(s,ct) копирует строку включая вращает s char ct, n) копирует не более n символов строки ct в s; воз- вращает s. Дополняет результат символами ' если символов в ct меньше n char приписывает ct к s; возвращает s n) приписывает не более n символов ct к s, завер- шая s символом ' возвращает s сравнивает cs и ct; возвращает <0, если cs char * strerror(n) char * возвращает указатель на первое вхождение или, если такового не оказалось, возвращает указатель на последнее вхождение с в cs или, если такового не оказалось, NULL возвращает длину начального сегмента состоя- щего из символов, входящих в строку ct возвращает длину начального сегмента состоя- щего из символов, не входящих в строку ct возвращает указатель в cs на первый символ, ко- торый совпал с одним из символов, входящих в ct, или, если такового не оказалось, NULL возвращает указатель на первое вхождение ct в cs или, если такового не оказалось, NULL возвращает длину cs возвращает указатель на зависящую от реализа- ции строку, соответствующую номеру ошиб- ки n st rtok ищет в s лексему, ограниченную символа- ми из ct; более подробное описание этой функ- ции ниже Здесь и ниже под такими как cs I! Зак. 322 Приложение В. Стандартная библиотека программам. В приведенной ниже таблице s и t принадлежат типу void cs и ct - типу const void *; n - типу size_t; а с имеет значение типа int, приведенное к типу void копирует n символов из ct в s и возвращает s void ct, n) делает то же самое, что и memcpy, но работа- ет и в случае "перекрывающихся" объектов. int ct, n) сравнивает первые п символов cs и ct; выда- ет тот же результат, что и функция st void n) возвращает указатель на первое вхождение символа с в cs или, если среди первых n сим- волов с не встретилось, void с, n) размещает символ с в первых n позициях строки s и возвращает s В 4. Математические функции: h> В заголовочном файле h> описываются математические функции и определяются макросы. Макросы EDOM и ERANGE (находящиеся в задают отличные от нуля целочисленные константы, используемые для фиксации ошибки области и ошибки диапазона; HUGE_VAL определена как положительное значение типа Ошибка области возникает, если аргумент выходит за область значений, для которой определена функция. Фиксация ошиб- ки области осуществляется присвоением е г г п о значения EDOM; возвраща- емое значение зависит от реализации. Ошибка диапазона возникает тогда, когда результат функции не может быть представлен в виде double. В случае переполнения функция возвращает HUGE_VAL с правильным зна- ком и в е г г п о устанавливается значение ERANGE. Если результат оказыва- ется меньше, чем возможно представить данным типом, функция возвра- щает нуль, а устанавливается ли в этом случае в еггпо ERANGE, зависит от реализации. Далее х и у имеют тип double, n - тип int, и все функции возвращают значения типа double. Углы в тригонометрических функци- ях задаются в радианах. s i n ( x ) cos(x) t a n ( x ) a s i n ( x ) х л/2], acos(x) диапазоне [0, л], [-1, 1] В 5. Функции общего назначения: 323 atan(x) cosh(x) log(x) loglO(x) ceil(x) floor(x) fabs(x) frexp(x, int *exp) double *ip) арктангенс х в диапазоне я/2] арктангенс в диапазоне л] гиперболический синус х гиперболический косинус х гиперболический тангенс х экспоненциальная функция натуральный логарифм х > О десятичный логарифм Ошибка области, если х = О и у О или х < 0 и у - не целое наименьшее целое в виде double, которое не мень- ше ж наибольшее целое в виде double, которое не боль- ше х абсолютное значение | х \ разбивает х на два сомножителя, первый из которых - нормализованная дробь в интервале [1/2, 1), которая возвращается, а второй - степень двойки, эта степень запоминается в *ехр. Если х - нуль, то обе части результата равны нулю разбивается на целую и дробную части, обе имеют тот же знак, что и х. Целая часть запо- минается в дробная часть выдается как результат остаток от деления х на у в виде числа с плава- ющей точкой. Знак результата совпадает со зна- ком х. Если у равен нулю, результат зависит от реализации В 5. Функции общего назначения: Заголовочный файл atof переводит s в double; эквивалентна strtod(s, NULL). int atoi(const char *s) в эквивалентна ( i n t ) s t r t o l ( s . 10). 324 Приложение В. Стандартная библиотека int atol(const char в s t r t o l ( s , N U L L , 10). double char *s, char преобразует первые символы строки s в double, игнорируя начальные символы-разделители; запоминает указатель на непреобразованный конец в *endp (если endp не при переполнении она выдает HUGE_VAL с соответ- ствующим знаком, в случае, если результат оказывается меньше, чем возмож- но представить данным типом, возвращается 0; в обоих случаях в уста- навливается ERANGE. long strtol(const char *s, char **endp, int base) strtol преобразует первые символы строки s в long, игнорируя начальные символы-разделители; запоминает указатель на конец в *endp (если endp не NULL). Если base находится в диапазоне от 2 до 36, то пре- образование делается в предположении, что на входе - запись числа по основа- нию base. Если base равно нулю, то основанием числа считается или 16; число, начинающееся с цифры 0, считается восьмеричным, а с Ох или ОХ - Цифры от 10 до записываются начальными буква- ми латинского алфавита в любом регистре. При основании, равном в нача- ле числа разрешается помещать Ох или ОХ. В случае переполнения функция возвращает или (в зависимости от знака), а в еггпо устанав- ливается ERANGE. unsigned long strtoul(const char *s, char **endp, int base) . работает так же, как и strtol, с той лишь разницей, что возвращает результат типа unsigned long, а в случае переполнения - int rand(void) rand выдает псевдослучайное число в диапазоне от 0 до не меньше 32767. void int seed) использует seed в качестве семени для новой последовательности псевдо- случайных чисел. Изначально параметр seed равен void *calloc(size_t nobj, size_t size) calloc возвращает указатель на место в памяти, отведенное для массива n o b j объектов, каждый из которых размера или, если памяти запрашиваемого объема нет, NULL. Выделенная область памяти обнуляется. void size) возвращает указатель на место в памяти для объекта размера size или, если памяти запрашиваемого объема нет, NULL. Выделенная область памяти не инициализируется. В 5. Функции общего назначения: void *p, size_t size) заменяет на size размер объекта, на который указывает р. Для части, размер которой равен наименьшему из старого и нового размеров, содержи- мое не изменяется. Если новый размер больше старого, дополнительное про- странство не инициализируется, realloc возвращает указатель на новое место памяти или, если требования не могут быть удовлетворены, NULL (*p при этом не void free(void *p) освобождает область памяти, на которую указывает р; эта функция ниче- го не делает, если р равно В р должен стоять указатель на область памяти, ранее выделенную одной из функций: calloc, malloc или realloc. void abort(void *p) вызывает аварийное завершение программы, ее действия эквивалентны вызову void exit(int status) exit вызывает нормальное завершение программы. Функции, зарегистриро- ванные с помощью atexit, выполняются в порядке, обратном их регистрации. Производится опорожнение буферов открытых файлов, открытые потоки зак- рываются, и управление возвращается в среду, из которой был произведен за- пуск программы. Значение status, передаваемое в среду, зависит от реализа- ции, однако при успешном завершении программы принято передавать нуль. Можно также использовать значения EXIT_SUCCESS (в случае успешного за- вершения) и EXIT_FAILURE (в случае ошибки). int atexit(void atexit регистрирует в качестве функции, которая будет вызываться при нормальном завершении программы; возвращает ненулевое значение, если регистрация не может быть выполнена. int system(const char *s) system передает строку s операционной среде для выполнения. Если s есть NULL и существует командный процессор, то system возвращает ненулевое значе- ние. Если s не NULL, то возвращаемое значение зависит от реализации. char *getenv(const char getenv возвращает строку среды, связанную с name, или, если никакой строки не существует, NULL. Детали зависят от реализации. void void const void *base, size, int void *keyval, const void bsearch ищет среди base элемент с подходящим ключом *key. 326 Приложение В. Стандартная библиотека Функция должна сравнивать первый аргумент (ключ поиска) со своим вторым аргументом (значением ключа в таблице) и в зависимости от резуль- тата сравнения выдавать отрицательное число, нуль или положительное зна- чение. Элементы массива base должны быть упорядочены в возрастающем возвращает указатель на элемент с подходящим ключом или, если такого не оказалось, NULL. void qsort(void *base, size_t n, size_t size, int void *, const void *)) qsort сортирует массив ] объектов размера size в возрастаю- щем порядке. Функция сравнения стр - такая же, как и в rch. int abs(int n) abs возвращает абсолютное значение аргумента типа int. long labs(long n) labs возвращает абсолютное значение аргумента типа long. div_t div(int int denom) div вычисляет частное и остаток от деления на denom. Результаты типа int запоминаются в элементах quot и rem структуры div_t. ldiv_t ldiv(long num, long denom) вычисляет частное и остаток от деления num на denom. Результаты типа long запоминаются в элементах quot и rem структуры ldiv_t. В 6. Диагностика: h> Макрос используется для включения в программу диагности- ческих сообщений. void assert (int выражение) Если выражение имеет значение нуль, то assert (выражение) напечатает в сообщение следующего вида: Assertion f a i l e d : выражение, file имя-файла, line после чего будет вызвана функция которая завершит вычисления. Имя исходного файла и номер строки будут взяты из макросов FILE и __LINE__. Если в момент включения файла h> было определено имя то макрос игнорируется. В 8. Дальние переходы: h> 327 В 7. Списки аргументов переменной длины: Заголовочный файл h> предоставляет средства для перебора аргументов функции, количество и типы которых заранее не известны. Пусть - последний именованный параметр функции f с пере- менным числом аргументов. Внутри f объявляется переменная ар типа предназначенная для хранения указателя на очередной аргумент: va_list ар; Прежде чем будет возможен доступ к безымянным аргументам, необхо- димо один раз инициализировать ар, обратившись к макросу va_start: va_start(va_list ар, С этого момента каждое обращение к макросу: тип va_arg(va_list ар, будет давать значение очередного безымянного аргумента указанного типа, и каждое такое обращение будет вызывать автоматическое прира- щение указателя ар, чтобы последний указывал на следующий аргумент. Один раз после перебора аргументов, но до выхода из f необходимо обра- титься к макросу void va_end(va_list ар); В 8. Дальние переходы: h> Объявления в предоставляют способ отклониться от обыч- ной последовательности "вызов - возврат"; типичная ситуация - необхо- димость вернуться из "глубоко вложенного" вызова функции на верхний уровень, минуя промежуточные возвраты. int env) Макрос set j m p сохраняет текущую информацию о вызовах в env для последу- ющего ее использования в j m p . Возвращает нуль, если возврат осуществ- ляется непосредственно из j m p , и не нуль, если - от последующего вызова Обращение к set j m p возможно только в определенных контекстах; в основном это проверки в switch и циклах, причем только в простых выра- жениях отношения. if == 0) /* после прямого возврата */ else /* после возврата из longjmp */ 328 В. Стандартная библиотека void int восстанавливает информацию, сохраненную в самом последнем вызо- ве по информации из env; выполнение программы возобновляется, как если бы функция set j m p только что отработала и вернула ненулевое значение val. Результат будет непредсказуемым, если в момент обращения к longjmp функция, содержащая вызов set j m p , уже "отработала" и осуществила возврат. Доступные ей объекты имеют те значения, которые они имели в момент обра- щения к set j m p не сохраняет значений. В 9. Сигналы: Заголовочный файл предоставляет средства для обработки исключительных ситуаций, возникающих во время выполнения програм- мы, таких как прерывание, вызванное внешним источником или ошиб- кой в вычислениях. void signal устанавливает, как будут обрабатываться последующие сигналы. Если параметр handler имеет значение то используется зависимая от реа- лизации "обработка по умолчанию"; если значение handler равно SIG_IGN, то сигнал игнорируется; в остальных случаях будет выполнено обращение к фун- кции, на которую указывает handler с типом сигнала в качестве аргумента. В число допустимых видов сигналов входят: SIGABRT - аварийное завершение, например от SIGFPE - арифметическая ошибка: деление на 0 или перепол- нение; SIGILL - неверный код функции (недопустимая команда); SIGINT - запрос на взаимодействие, например прерывание; EGV - неверный доступ к памяти, например выход за границы; SIGTERM - требование завершения, посланное в программу. signal возвращает предыдущее значение h a n d l e r в случае специфициро- ванного сигнала, или SIGERR в случае возникновения ошибки. Когда в дальнейшем появляется сигнал sig, сначала восстанавливается готовность поведения "по умолчанию", после чего вызывается функция, заданная в параметре handle т. е. как бы выполняется вызов handle Если функция handler вернет управление назад, то вычисления возобно- вятся с того места, где застал программу пришедший сигнал. Начальное состояние сигналов зависит от реализации. int raise(int sig) r a i s e посылает в программу сигнал sig. В случае неудачи возвращает ненуле- вое значение. В 10. Функции даты и времени: 329 В 10. Функции даты и времени: Заголовочный файл h> объявляет типы и связанные с датой и временем. Некоторые функции имеют дело с местным време- нем, которое может отличаться от календарного, например в связи с зо- нированием времени. Типы clock_t и time - арифметические типы для представления времени, a содержит компоненты календарного времени: int tm_sec; - секунды от начала минуты int - минуты от начала часа int - часы от полуночи int - число месяца int - месяцы с января int tm_year; - с 1900; int - дни с воскресенья int - дни с 1 января int - признак летнего времени. Значение - положительное, если время приходится на когда время суток сдвинуто на 1 час вперед, нуль в противном случае и отрица- тельное, если информация не доступна. clock_t clock возвращает время, фиксируемое процессором от начала выполнения про- граммы, или если оно не известно. Для выражения этого времени в секун- дах применяется формула *tp) time возвращает текущее календарное время (т. е. время, прошедшее после оп- ределенной даты, - обычно после 0 ч 00 мин 00 с GMT 1-го января 1970 г. - примеч. или если время не известно. Если tp не равно NULL, то возвра- щаемое значение записывается и в double возвращает разность выраженную в секундах. tm «tp) преобразует местное время, заданное структурой *tp, в календарное, выдавая его в том же виде, что и функция Компоненты будут иметь зна- чения в указанных диапазонах. Функция возвращает календарное вре- мя или если оно не представимо. Следующие четыре функции возвращают указатели на статические объекты, каждый из которых может быть изменен другими вызовами. 330 Приложение В. Стандартная библиотека char struct *tp) переводит время в структуре *tp в строку вида Sun Jan 3 1988\n\0 char *tp) time переводит календарное время в местное, что эквивалентно выполнению struct *tp) переводит календарное время во Всемирное координированное время (Coordinated Universal Time - UTC). Выдает NULL, если UTC не известно. Имя этой происходит от Greenwich Mean Time (среднее время по Гринвичскому меридиану). struct tm *localtime(const time_t переводит календарное время *tp в местное. size_t *s, size_t const char const struct tm *tp) форматирует информацию о дате и времени из *tp в строку s соглас- но формату который имеет много общих черт с форматом, задаваемым в функции Обычные символы (включая и завершающий символ ' копируются в s. Каждая пара, состоящая из % и буквы, заменяется, как показа- но ниже, с использованием значений по форме, соответствующей местным традициям. В s размещается не более smax символов, возвращает чис- ло символов без учета ' или нуль, если число сгенерированных символов больше smax. %а сокращенное название дня недели полное название дня недели сокращенное название месяца %В полное название месяца. %с местное представление даты и времени %d день месяца %Н час (24-часовое время) (00-23) час (12-часовое время) (01-12) от начала года (001-366) %т месяц (01-12) %М минута местное представление AM или РМ (до или после полудня) %S секунда неделя от начала года (считая, что воскресенье - 1-й день недели) %w день недели (0-6, номер воскресенья - 0) неделя от начала года (считая, что понедельник - 1 день недели) |