Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Справочные материалы 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(). Результат применения такого макроса с вещественным аргументом не определен.
В табл. B.V.38 перечислены обобщенные функциональные макросы.
Справочные материалы 883
Таблица 6.V.38. Обобщенные математические функции
До выхода стандарта С11 для определения обобщенных макросов реализации должны были прибегать к расширениям стандарта. Но добавление выражения _Generic делает возможной прямую реализацию с использованием стандарта СИ.
ПОТОКИ: threads.h (С11)
Заголовочный файл threads.h наряду с stdatomic.h предоставляет поддержку для параллельного программирования. Эта тема выходит за рамки настоящей книги, но, выражаясь общими терминами, данный заголовочный файл поддерживает множество потоков выполнения, которые в принципе могут быть назначены разным процессорам.
Дата И время: time.h
В заголовочном файле time.h определены три макроса. Первым из них, который также определен во многих других заголовочных файлах, является NULL, представляющий нулевой указатель. Второй макрос — это CLOCKS_PER_SEC; деление на этот макрос значения, возвращенного функцией clock()', позволяет получить время в секундах. Третий макрос (С11) называется TIME_UTC и представляет собой положительную целочисленную константу, обозначающую координату времени UTC (Universal Time Coordinated — универсальное синхронизированное время), которая является потенциальным аргументом функции timespec_get().
UTC — это текущий основной стандарт мирового времени. Он применяется, например, в авиации, при составлении прогнозов погоды, для синхронизации компьютерных часов и в качестве общего стандарта в Интернете.
Определенные в этом заголовочном файле типы перечислены в табл. B.V.39.
Таблица 6.V.39. Типы, определенные в time.h
Структура timespec содержит, по меньшей мере, два члена, показанные в табл. Б.У40.
884 Приложение Б
Таблица 6.V.40. Члены структуры timespec
Компоненты календарного типа называют разделенным на составляющие временем. В табл. B.V.41 перечислены обязательные члены структуры struct tm.
Таблица 6.V.41. Члены структуры struct tm
Термин календарное время обозначает текущую дату и время; например, это может быть количество секунд, прошедших после первой секунды 1900 года. Термин локальное время — это календарное время, выраженное для локального часового пояса. Функции для работы со временем перечислены в табл. B.V.42.
Таблица 6.V.42. Функции для работы со временем
Справочные материалы 885
Окончание табл. Б. V.42
Интервал:
Закладка: