×
Traktatov.net » Язык программирования C [Лекции и упражнения, 6-е изд.] » Читать онлайн
Страница 537 из 557 Настройки



В заголовочном файле также определены константы, описанные в табл. B.V.35. Таблица 6.V.35. Константы, определенные в stdlib.h



В табл. B.V.36 представлены прототипы функций, определенные в stdlib.h. Таблица 6.V.36. Утилиты общего назначения











Справочные материалы 877





Продолжение табл. Б.\(.36







Справочные материалы 879

Окончание табл. B.V.36


_Noreturn: stdnoreturn.h

Это определяет макрос noreturn, который расширяется до _Noreturn.

Обработка строк: string.h

В заголовочном файле string.h определен тип size_t и макрос NULL для нулевого указателя. Кроме того, предлагается ряд функций для анализа и манипулирования символьными строками, а также несколько функций, работающих с памятью более универсальным способом. Эти функции перечислены в табл. B.V.37.

Таблица 6.V.37. Строковые функции








Справочные материалы 881

Окончание табл. B.V.37


Функция strtok() применяется несколько необычно, поэтому рассмотрим небольшой пример:

#include

#include

int main(void)

{

char data[] = " С приносит\t очень#много\nрадости!"; const char tokseps[] = " \t\n#";                          /*  разделители      */

char * pt;

puts(data);

pt = strtok(data,tokseps);       /*  первый вызов     */

while (pt)                       /*  выход в случае NULL      */

{

puts (pt);                    /*  показать лексему */

pt = strtok(NULL, tokseps);   /*  следующая лексема */

}

return 0;

}


882 Приложение Б

Вот вывод, полученный в результате запуска этого примера:

С приносит очень#много радости!

С

приносит очень много радости!

Математические функции для обобщенных типов:

tgmath.h (С99)

Библиотеки math.h и complex.h предоставляют множество экземпляров функций, которые отличаются только типами. Например, все шесть функций, показанные ниже, вычисляют синус:

double sin(double);

float sinf(float);

long double sinlllong double);

double complex csin(double complex);

float csinf(float complex);

long double csinlllong double complex);

В заголовочном файле tgmath.h определены макросы, которые расширяют обобщенный вызов в обращение к соответствующей функции, как указано типом аргумента. Следующий код иллюстрирует использование макроса sin(), расширяемого в различные формы функции синуса:

В этом заголовочном файле определены обобщенные макросы для трех классов функций. Первый класс состоит из функций math.h и complex.h, определенных в тести вариациях, в которых применяются суффиксы f и 1 и префикс с, как в предыдущем примере с sin(). В данном случае обобщенный макрос носит то же имя, что и версия double функции.

Во второй класс входят функции math.li, определенные в трех вариациях с использованием суффиксов f и 1, которые не имеют комплексных аналогов, к примеру, erf(). В этом случае имя макроса выглядит так же, как имя функции без суффикса, в рассматриваемом примере — erf(). Результат применения такого макроса с комплексным аргументом не определен.

Третий класс состоит из функций complex.h, которые определены в трех вариациях с использованием суффиксов f и 1 и не имеют вещественных аналогов, таких как cimag(). В данном случае имя макроса совпадает с именем функции без суффикса, в этом примере — cimag(). Результат применения такого макроса с вещественным аргументом не определен.