Основные библиотеки в Си
В языке Си стандартные функции собраны в различных библиотеках. Для использования
этих функций необходимо подключить к проекту соответствующие библиотеки с помощью конструкции #include. Например, #include<stdio.h>
Названия библиотек и их свойства
stdio.h | Библиотека ввода-вывода. |
stdlib.h | Вспомогательные функции, которые могут быть использованы в разнообразных программах |
math.h | Математическая библиотека. |
string.h | Работа с строками(массивами символов). |
time.h | Функции по работе с датами и временем, в том числе текущим. |
Составы библиотек
Состав stdio.h
Функции для файловых операций:
Имя функции | Описание |
fclose | закрывает файл, ассоциированный с переданным ей значением FILE * |
fopen, freopen, fdopen | открывают файл для определенных типов чтения и записи |
remove | удаляет файл (стирая его) |
rename | переименовывает файл |
rewind | работает аналогично fseek(stream, SEEK_SET), вызванному для потока, со сбросом индикатора ошибок |
tmpfile | создает и открывает временный файл, удаляемый при закрытии через fclose() |
Функции для операций ввода-вывода:
clearerr | очищает eof и индикаторы ошибок для данного потока |
feof | проверяет, установлен ли индикатор eof для данного потока |
ferror | проверяет, установлен ли индикатор ошибок для данного потока |
fflush | принудительно записывает вывод, предназначенный для помещения в буфер, в файл, ассоциированный с данным потоком |
fgetpos | сохраняет позицию указателя файла потока, ассоциированный с его первым аргументом (file *), в его второй аргумент (fpos_t *) |
fgetc | возвращает один символ из файла |
fgets | получает строку из файла (оканчивающуюся символом перевода строки или конца файла) |
fputc | записывает один символ в файл |
fputs | записывает строку в файл |
ftell | возвращает указатель позиции файла, который может быть передан fseek |
fseek | производит поиск по файлу |
fsetpos | устанавливает указатель позиции файла потока, ассоциированный с его первым аргументом (file *), как хранимый во втором его аргументе (fpos_t *) |
fread | читает данные из файла |
fwrite | записывает данные в файл |
getc | считывает и возвращает символ из данного потока и изменяет укащатель позиции файла; позволяет использоваться как макрос с теми же эффектами, что и fgetc, кроме того, что может вычислять поток более одного раза |
getchar | имеет аналогичный эффект, что и getc(stdin) |
gets | считывает символы из stdin до символа перевода строки и хранит их в своем единственном аргументе |
printf, vprintf | используются для вывода в стандартный поток вывода |
fprintf, vfprintf | используются для вывода в файл |
sprintf, snprintf, vsprintf | используются для вывода в массив типа char (строка в языке си) |
perror | записывает сообщение об ошибке в stderr |
putc | записывает и возвращает символ в поток и изменяет указатель позиции файла на него; можно использовать как макрос с теми же свойствами, что и fputc, кроме того, что он может обрабатывать поток более одного раза |
putchar, fputchar | аналогичны putc(stdout) |
scanf, vscanf | используются для ввода из стандартного потока ввода |
fscanf, vfscanf | используются для ввода из файла |
sscanf, vsscanf | используются для ввода из массива char (то есть строка в языке си) |
setvbuf | устанавливает режим буферизации для данного потока |
tmpnam | создает временное имя файла |
ungetc | помещает символ обратно в поток |
puts | выводит символьную строку в stdout |
Состав библиотеки stdlib.h
имя функции | описание |
abort | ненормальное завершение программы |
abs | модуль целого числа |
assert | макроопределение для вывода отладочных диагностических сообщений |
atexit | запрос вызова функции при завершении работы программы |
atof, atoff | преобразование строки в значение типа double или float |
atii, atol | строка в целое |
atol | преобразовывает строку в long |
bsearsh | двоичный поиск |
calloc | выделяет пространство для массивов |
div | деление двух целых |
ecvt, ecvtf, fcvt, fcvtf | преобразование double или float в строку |
gvcvt, gcvtf | форматируют double и float как строку |
ecvtbuf, fcvtbuf | double или float в строку |
exit | завершение выполнения программы |
getenv | поиск переменной окружения |
labs | модуль длинного целого |
ldiv | деление двyх длинных целых |
malloc, realloc, free | управление памятью |
mbtowc | минимальный преобразователь мультибайтов в широкие символы |
qsort | сортировка массива |
rand, srand | псевдо-случайные числа |
strtod, strtodf | строка в double или float |
strtol | строка в long |
strtoul | строка в unsigned long |
system | выполняет командную строку |
wctomb | минимальный преобразователь широких символов в мультибайты |
Состав библиотеки math.h
имя функции | описание |
acos | арккосинус |
asin | арксинус |
atan | арктангенс |
atan2 | арктангенс с двумя параметрами |
ceil | округление до ближайшего большего целого числа |
cos | косинус |
cosh | гиперболический косинус |
exp | вычисление экспоненты |
fabs | абсолютная величина (числа с плавающей точкой) |
floor | округление до ближайшего меньшего целого числа |
fmod | вычисление остатка от деления нацело для чисел с плавающей точкой |
frexp | разбивает число с плавающей точкой на мантиссу и показатель степени. |
ldexp | умножение числа с плавающей точкой на целую степень двух |
log | натуральный логарифм |
log10 | логарифм по основанию 10 |
modf(x,p) | извлекает целую и дробную части (с учетом знака) из числа с плавающей точкой |
pow(x,y) | результат возведения x в степень y, xy |
sin | синус |
sinh | гиперболический синус |
sqrt | квадратный корень |
tan | тангенс |
tanh | гиперболический тангенс |
Состав библиотеки string.h
имя функции | описание |
void *memcpy(void *dest, const void *src, size_t n); | копирует n байт из области памяти src в dest, которые не должны пересекаться, в противном случае результат неопределен (возможно как правильное копирование, так и нет) |
void *memmove(void *dest, const void *src, size_t n); | копирует n байт из области памяти src в dest, которые в отличие от memcpy могут перекрываться |
void *memchr(const void *s, char c, size_t n); | возвращает указатель на первое вхождение c в первых n байтах s, или null, если не найдено |
int memcmp(const void *s1, const void *s2, size_t n); | сравнивает первые n символов в областях памяти |
void *memset(void *, int z, size_t); | заполняет область памяти одним байтом z |
char *strcat(char *dest, const char *src); | дописывает строку src в конец dest |
char *strncat(char *, const char *, size_t); | дописывает не более n начальных симолов строки src (или всю src, если ее длина меньше) в конец dest |
char *strchr(const char *, int); | ищет символ в строке, начиная с головы и возращает его адрес, или null если не найден |
char *strrchr(const char *, int); | ищет символ в строке, начиная с хвоста и возращает его адрес, или null если не найден |
int strcmp(const char *, const char *); | лексикографическое сравнение строк |
int strncmp(const char *, const char *, size_t); | лексикографическое сравнение первых n байтов строк |
int strcoll(const char *, const char *); | лексикографическое сравнение строк с учетом локали collating order |
char *strcpy(char *tohere, const char *fromhere); | копирует строку из одного места в другое |
char *strncpy(char *tohere, const char *fromhere, size_t); | копирует до n байт строки из одного места в другое |
char *strerror(int); | возвращает строковое представление сообщения об ошибке errno (не потоко-безопасная) |
size_t strlen(const char *); | возвращает длину строки |
size_t strspn(const char *s, const char *accept); | определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, перечисленных в accept |
size_t strcspn(const char *s, const char *reject); | определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, не перечисленных в reject |
char *strpbrk(const char *s, const char *accept); | находит первое вхождение любого символа, не перечисленного в accept |
char *strstr(const char *haystack, const char *needle); | находит первое вхождение строки needle в haystack |
char *strtok(char *, const char *); | преобразует строку в последовательность токенов. не потоко-безопасная, нереентрантная. |
size_t strxfrm(char *dest, const char *src, size_t n); | создает оттранслированную копию строки, такую, что дословное сравнение ее (strcmp) будет эквивалентно сравнению с коллатором. |
Библиотеки
Библиотеки позволяют использовать разработанный ранее программный код в различных программах. Таким образом, программист может не разрабатывать часть кода для своей программы, а воспользоваться тем, что входит в состав библиотек.
В языке программирования C код библиотек представляет собой функции, размещенные в файлах, которые скомпилированы в объектные файлы, а те, в свою очередь, объединены в библиотеки. В одной библиотеке объединяются функции, решающие определенный тип задач. Например, существует библиотека математических функций.
У каждой библиотеки должен быть свой заголовочный файл, в котором должны быть описаны прототипы (объявления) всех функций, содержащихся в этой библиотеке. С помощью заголовочных файлов вы «сообщаете» вашему программному коду, какие библиотечные функции есть и как их использовать.
При компиляции программы библиотеки подключаются линковщиком, который вызывается gcc. Если программе требуются только стандартные библиотеки, то дополнительных параметров линковщику передавать не надо (есть исключения). Он «знает», где стандартные библиотеки находятся, и подключит их автоматически. Во всех остальных случаях при компиляции программы требуется указать имя библиотеки и ее местоположение.
Библиотеки бывают двух видов — статические и динамические. Код первых при компиляции полностью входит в состав исполняемого файла, что делает программу легко переносимой. Код динамических библиотек не входит в исполняемый файл, последний содержит лишь ссылку на библиотеку. Если динамическая библиотека будет удалена или перемещена в другое место, то программа работать не будет. С другой стороны, использование динамических библиотек позволяет сократить размер исполняемого файла. Также если в памяти находится две программы, использующие одну и туже динамическую библиотеку, то последняя будет загружена в память лишь единожды.
Далее будет описан пример, в котором создается библиотека, после чего используется при создании программы.
Пример создания библиотеки
Допустим, мы хотим создать код, который в дальнейшем планируем использовать в нескольких проектах. Следовательно, нам требуется создать библиотеку. Исходный код для библиотеки было решено разместить в двух файлах исходного кода.
Также на данный момент у нас есть план первого проекта, использующего эту библиотеку. Сам проект также будет включать два файла.
В итоге, когда все будет сделано, схема каталогов и файлов будет выглядеть так:
Пусть каталоги library и project находятся в одном общем каталоге, например, домашнем каталоге пользователя. Каталог library содержит каталог source с файлами исходных кодов библиотеки. Также в library будут находиться заголовочный файл (содержащий описания функций библиотеки), статическая (libmy1.a) и динамическая (libmy2.so) библиотеки. Каталог project будет содержать файлы исходных кодов проекта и заголовочный файл с описанием функций проекта. Также после компиляции с подключением библиотеки здесь будет располагаться исполняемый файл проекта.
В операционных системах GNU/Linux имена файлов библиотек должны иметь префикс «lib», статические библиотеки — расширение *.a, динамические — *.so.
Для компиляции проекта достаточно иметь только одну библиотеку: статическую или динамическую. В образовательных целях мы получим обе и сначала скомпилируем проект со статической библиотекой, потом — с динамической. Статическая и динамическая «разновидности» одной библиотеки по-идее должны называться одинаково (различаются только расширения). Поскольку у нас обе библиотеки будут находиться в одном каталоге, то чтобы быть уверенными, что при компиляции проекта мы используем ту, которую хотим, их названия различны (libmy1 и libmy2).
Исходный код библиотеки
Файл figure.c:
void rect(char sign, int w, int h) { int i, j; for (i=0; i < w; i++) putchar(sign); putchar('\n'); for (i=0; i < h-2; i++) { for (j=0; j < w; j++) { if (j == 0 || j == w-1) putchar(sign); else putchar(' '); } putchar('\n'); } for (i=0; i < w; i++) putchar(sign); putchar('\n'); } void diagonals(char sign, int w) { int i, j; for (i=0; i < w; i++) { for (j=0; j < w; j++) { if (i == j || i+j == w-1) putchar(sign); else putchar(' '); } putchar('\n'); } }
В файле figure.c содержатся две функции — rect()
и diagonals()
. Первая принимает в качестве аргументов символ и два числа и «рисует» на экране с помощью указанного символа прямоугольник заданной ширины и высоты. Вторая функция выводит на экране две диагонали квадрата («рисует» крестик).
Файл text.c:
void text(char *ch) { while (*ch++ != '\0') putchar('*'); putchar('\n'); }
В файле text.c определена единственная функция, принимающая указатель на символ строки. Функция выводит на экране звездочки в количестве, соответствующем длине указанной строки.
Файл mylib.h:
void rect(char sign, int width, int height); void diagonals(char sign, int width); void text(char *ch);
Заголовочный файл можно создать в каталоге source, но мы лучше сохраним его там, где будут библиотеки. В данном случае это на уровень выше (каталог library). Тем самым как бы подчеркивается, что файлы исходных кодов после создания из них библиотеки вообще не нужны пользователям библиотек, они нужны лишь разработчику библиотеки. А вот заголовочный файл библиотеки требуется для ее правильного использования.
Создание статической библиотеки
Статическую библиотеку создать проще, поэтому начнем с нее. Она создается из обычных объектных файлов путем их архивации с помощью утилиты ar.
Все действия, которые описаны ниже выполняются в каталоге library (т.е. туда надо перейти командой cd). Просмотр содержимого каталога выполняется с помощью команды ls или ls -l.
Получаем объектные файлы:
gcc -c ./source/*.c
В итоге в каталоге library должно наблюдаться следующее:
figures.o mylib.h source text.o
Далее используем утилиту ar для создания статической библиотеки:
ar r libmy1.a *.o
Параметр r позволяет вставить файлы в архив, если архива нет, то он создается. Далее указывается имя архива, после чего перечисляются файлы, из которых архив создается.
Объектные файлы нам не нужны, поэтому их можно удалить:
rm *.o
В итоге содержимое каталога library должно выглядеть так:
libmy1.a mylib.h source
, где libmy1.a — это статическая библиотека.
Создание динамической библиотеки
Объектные файлы для динамической библиотеки компилируются особым образом. Они должны содержать так называемый позиционно-независимый код (position independent code). Наличие такого кода позволяет библиотеке подключаться к программе, когда последняя загружается в память. Это связано с тем, что библиотека и программа не являются единой программой, а значит как угодно могут располагаться в памяти относительно друг друга. Компиляция объектных файлов для динамической библиотеки должна выполняться с опцией -fPIC компилятора gcc:
gcc -c -fPIC source/*.c
В отличие от статической библиотеки динамическую создают при помощи gcc указав опцию -shared:
gcc -shared -o libmy2.so *.o
Использованные объектные файлы можно удалить:
rm *.o
В итоге содержимое каталога library:
libmy1.a libmy2.so mylib.h source
Использование библиотеки в программе
Исходный код программы
Теперь в каталоге project (который у нас находится на одном уровне файловой иерархии с library) создадим файлы проекта, который будет использовать созданную библиотеку. Поскольку сама программа будет состоять не из одного файла, то придется здесь также создать заголовочный файл.
Файл data.c:
#include <stdio.h> #include "../library/mylib.h" void data (void) { char strs[3][30]; char *prompts[3] = { "Ваше имя: ", "Местонахождение: ", "Пунк прибытия: "}; int i; for (i=0; i<3; i++) { printf("%s", prompts[i]); gets(strs[i]); } diagonals('~', 7); for (i=0; i<3; i++) { printf("%s", prompts[i]); text(strs[i]); } }
Функция data()
запрашивает у пользователя данные, помещая их в массив strs. Далее вызывает библиотечную функцию diagonals()
, которая выводит на экране «крестик». После этого на каждой итерации цикла вызывается библиотечная функция text()
, которой передается очередной элемент массива; функция text()
выводит на экране звездочки в количестве равному длине переданной через указатель строки.
Обратите внимание на то, как подключается заголовочный файл библиотеки: через относительный адрес. Две точки обозначают переход в каталог на уровень выше, т.е. родительский по отношению к project, после чего путь продолжается во вложенный в родительский каталог library. Можно было бы указать абсолютный путь, например, «/home/pl/c/les22/library/mylib.h». Однако при перемещении каталогов библиотеки и программы на другой компьютер или в другой каталог адрес был бы уже не верным. В случае с относительным адресом требуется лишь сохранять расположение каталогов project и library относительно друг друга.
Файл main.c:
#include <stdio.h> #include "../library/mylib.h" #include "project.h" int main() { rect('-',75,4); data(); rect('+',75,3); }
Здесь два раза вызывается библиотечная функция rect()
и один раз функция data()
из другого файла проекта. Чтобы сообщить функции main()
прототип data()
также подключается заголовочный файл проекта.
Файл project.h содержит всего одну строчку:
void data(void);
Из обоих файлов проекта с исходным кодом надо получить объектные файлы для объединения их потом с файлом библиотеки. Сначала мы получим исполняемый файл, содержащий статическую библиотеку, потом — связанный с динамической библиотекой. Однако с какой бы библиотекой мы не компоновали объектные файлы проекта, компилируются они как для статической, так и динамической библиотеки одинаково:
gcc -c *.c
При этом не забудьте сделать каталог project текущим!
Компиляция проекта со статической библиотекой
Теперь в каталоге project есть два объектных файла: main.o и data.o. Их надо скомпилировать в исполняемый файл project, объединив со статической библиотекой libmy1.a. Делается это с помощью такой команды:
gcc -o project *.o -L../library -lmy1
Начало команды должно быть понятно: опция -o указывает на то, что компилируется исполняемый файл project из объектных файлов.
Помимо объектных файлов проекта в компиляции участвует и библиотека. Об этом свидетельствует вторая часть команды: -L../library -lmy1. Здесь опция -L указывает на адрес каталога, где находится библиотека, он и следует сразу за ней. После опции -l записывается имя библиотеки, при этом префикс lib и суффикс (неважно .a или .so) усекаются. Обратите внимание, что после данных опций пробел не ставится.
Опцию -L можно не указывать, если библиотека располагается в стандартных для данной системы каталогах для библиотек. Например, в GNU/Linux это /lib/, /urs/lib/ и др.
Запустив исполняемый файл project и выполнив программу, мы увидим на экране примерно следующее:
Посмотрим размер файла project:
pl@desk:~/c/project$ ls -l project -rwxr-xr-x 1 pl pl 8648 ноя 19 07:46 project
Его размер равен 8698 байт.
Компиляция проекта с динамической библиотекой
Теперь удалим исполняемый файл и получим его уже связанным с динамической библиотекой. Команда компиляции с динамической библиотекой выглядит так (одна команда разбита на две строки с помощью обратного слэша и перехода на новую строку):
gcc -o project *.o \ > -L../library -lmy2 -Wl,-rpath,../library/
Здесь в отличии от команды компиляции со статической библиотеки добавлены опции для линковщика: -Wl,-rpath,../library/. -Wl — это обращение к линковщику, -rpath — опция линковщика, ../library/ — значение опции. Получается, что в команде мы два раза указываем местоположение библиотеки: один раз с опцией -L, а второй раз с опцией -rpath. Видимо для того, чтобы понять, почему так следует делать, потребуется более основательно изучить процесс компиляции и компоновки программ на языке C.
Следует заметить, что если вы скомпилируете программу, используя приведенную команду, то исполняемый файл будет запускаться из командной строки только в том случае, если текущий каталог project. Стоит сменить каталог, будет возникать ошибка из-за того, что динамическая библиотека не будет найдена. Но если скомпилировать программу так:
gcc -o project *.o -L../library -lmy2 \ > -Wl,-rpath,/home/pl/c/library
, т.е. указать для линковщика абсолютный адрес, то программа в данной системе будет запускаться из любого каталога.
Размер исполняемого файла проекта, связанного с динамической библиотекой, получился равным 8544 байта. Это немного меньше, чем при компиляции проекта со статической библиотекой. Если посмотреть на размеры библиотек:
pl@desk:~/c/library$ ls -l libmy* -rw-r--r-- 1 pl pl 3712 ноя 19 07:35 libmy1.a -rwxr-xr-x 1 pl pl 7896 ноя 19 07:36 libmy2.so
, то видно, что динамическая больше статической, хотя исполняемый файл проекта со статической библиотекой больше. Это доказывает, что в исполняемом файле, связанном с динамической библиотекой, присутствует лишь ссылка на нее.
Курс с решением части задач:
pdf-версия
Тайные знания: библиотеки для С++
Время на прочтение
5 мин
Количество просмотров 26K
Рун не должен резать
Тот, кто в них не смыслит.
В непонятных знаках
Всякий может сбиться.
(Сага об Эгиле)
Многие начинающие программисты, уже освоив синтаксис C++, обнаруживают, что нет простого способа как подключить библиотеку, так и собрать программу для другой ОС, или чего хуже, под другим компьютером с той же ОС.
Это проблема отчасти порождается спорной практикой в обучении, когда код учат писать и запускать средствами IDE, таких как Visual Studio, Code::Blocks, и других. Поначалу такой подход работает, но лишь до первой реальной задачи сделать что-то, что запустится не только на вашем компьютере. Тут-то новички и сталкиваются с отсутствием стандартной системы сборки и менеджера зависимостей. После осознания этой сложности, большинство студентов, как правило, переходят на другие языки, попутно тиражируя в индустрии миф о том, что C++ де не кроссплатформенный язык, а вот мой Python/Java/C# — да. Между тем нас окружает множество замечательных кроссплатформенных программ написанных на C++. Если вы обучаетесь C++ и хотите понять как создавать такое ПО, то эта статья для вас.
1. Минутка теории. Получение исполняемого файла всегда и везде, зачем это необходимо?
Если вы читаете эту статью, то наверное, отдалено уже понимаете, что преобразует код компилятор (а склеивает в один исполнямый файл линковщик), но на практике, скорее всего до сих пор не сталкивались с этим, запуская сборку в один исполняемый файл сразу из IDE. Возможно вы вообще не пробовали собрать программу в файл, запуская её красивой зелененькой кнопочкой Run.
Однако и сама IDE, в свою очередь, не собирает и не запускает ваш код, а лишь вызывает специальную программу, которая называется система сборки, или сборщик, который-то и отвечает за сборку проекта и взаимодействие с компилятором и линковщиком.
У Visual Studio, к примеру, сборщиком по умолчанию является MSBuild, а у CLion — CMake. Те дополнительные файлы, которые вы видите, создав новый проект через интерфейс IDE, и являются конфигурацией для системы сборки. Наша задача просто научиться взаимодействовать с ней напрямую. Для этого мы возьмем CMake, потому что в отличие от MSBuild, эта система сборки запускается на большинстве ОС.
Почему надо разобраться в конфигурации системы сборки? Разве мне недостаточно среды, спросите вы? Потому что ваша среда может запуститься не везде, а система сборки гораздо более переносима, с ней вы сможете автоматизировать сборку, использовать контейнеры Docker, сможете оставить в репозитории билд скрипт который соберет ваш код на любом компьютере — ну разве не круто?
2. Пишем конфигурацию сборки самостоятельно
Итак, пришло время выйти из уютного мира в IDE, и вступить на путь уже кроссплатформенной стрельбы себе в ногу. Прежде всего, убедитесь что ваш код использует только стандартные функции С++. Если он вызывает ОС-зависимые API, вроде #include <Windows.h>, то рассмотрите чем их можно заменить. После этого воспользуемся следующим шаблоном CMake и создадим новый файл CMakeLists.txt:
cmake_minimum_required(VERSION 3.18)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Подключаем менеджер зависимостей Conan
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake"
EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
TLS_VERIFY ON)
endif ()
include(${CMAKE_BINARY_DIR}/conan.cmake)
# Подключаем репозиторий зависимостей https://conan.io
conan_add_remote(NAME conan-center INDEX 1 URL https://center.conan.io VERIFY_SSL True)
# Скачиваем нужные нам зависимости, например:
conan_cmake_configure(REQUIRES catch2/2.13.6 spdlog/1.8.5 threadpool/20140926 simdjson/0.9.6 icu/69.1 GENERATORS cmake_find_package)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE . BUILD missing REMOTE conan-center SETTINGS ${settings})
# Делаем зависимости видимыми для CMake
find_package(Catch2) # фреймворк тестирования
find_package(ICU) # работа с юникодом
find_package(spdlog) # логирование
find_package(simdjson) # парсинг json с помощью simd
find_package(ThreadPool) # ThreadPoolExecutor
# Подключаем файлы с основным кодом
file(GLOB proj_sources src/*.cpp)
add_executable(app ${proj_sources})
# Линкуем зависимости для основного кода (имена для линковки можно вытащить из описания зависимостей)
target_link_libraries(app PRIVATE ThreadPool::ThreadPool spdlog::spdlog simdjson::simdjson ICU::io ICU::i18n ICU::uc ICU::data)
# Подключаем файлы с кодом тестов
list(FILTER proj_sources EXCLUDE REGEX ".*/Main.cpp$")
file(GLOB test_sources test/*.cpp)
add_executable(test ${proj_sources} ${test_sources})
# Линкуем зависимости для тестов
target_link_libraries(test PRIVATE Catch2::Catch2 ThreadPool::ThreadPool spdlog::spdlog simdjson::simdjson ICU::io ICU::i18n ICU::uc ICU::data)
В этом шаблоне задаётся практически все, что нужно вам для сборки:
-
Устанавливается стандарт C++20
-
Подключается репозиторий библиотек Conan
-
Задается соглашение, что файлы с кодом (.cpp, .h) будут лежать в папке src.
-
Задается соглашение, что файлы с кодом для тестов будут лежать в паке test.
-
Задаётся соглашение, что точки входа (int main) будут лежать в файлах Main.cpp
Убедитесь что ваш код хранится по этим соглашениям.
В скрипте также сразу подключается для примера несколько библиотек, по аналогии, следуя комментариям, вы можете добавить нужные вам.
Искать их можно тут: conan.io.
3. Как теперь собрать наше приложение в файл?
Мы отказались от кнопочек IDE в пользу более могущественного скрипта. Теперь нам понадобится платформа GCC или LLVM (возможно они уже есть на вашем компьютере), установленная система сборки CMake и менеджер зависимостей Conan. Их легко установить при помощи пакетного менеджера вашей ОС, или вручную, с официальных сайтов.
Откройте терминал в папке, где лежит CMakeLists.txt. Сначала нужно подготовить make-файлы. Воспринимайте это как предварительное действие:
cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -B bin
После этого можно собрать само приложение и тесты:
cmake --build bin --target all
Приложение будет расположено в директории bin
в файле под именем app
.
Тесты могут быть запущены при помощи отдельного файла test
в той же директории.
Вот и всё! Не так уж сложно, правда? Теперь вы можете распространять свое ПО на разные ОС, легко собирать его и подключать библиотеки. Если вы попробовали и что-то не работает, или есть какие-то вопросы, то их можно задать в комментариях под этой статьёй, постараюсь ответить.
После того как вы разберетесь как это делать, можно пользоваться моим project-wizard’ом для создания кроссплатформенных C++ утилит и библиотек в один клик: github.com/demidko
Однако сперва рекомендую попробовать воспроизвести результат самостоятельно, для лучшего понимания, что именно вы делаете, ведь в процессе приходят осознание и навык.
Давайте скомпилируем и запустим вышеуказанную программу, которая даст следующий результат –
Заголовок limit.h определяет различные свойства различных типов переменных. Макросы, определенные в этом заголовке, ограничивают значения различных типов переменных, таких как char, int и long.
Эти ограничения указывают на то, что переменная не может хранить любое значение за пределами этих ограничений, например, беззнаковый символ может хранить до максимального значения 255.
Следующие значения зависят от реализации и определяются с помощью директивы #define, но эти значения могут быть не ниже указанных здесь.
В следующем примере показано использование нескольких констант, определенных в файле limit.h .
#include <stdio.h> #include <limits.h> int main() { printf("The number of bits in a byte %d\n", CHAR_BIT); printf("The minimum value of SIGNED CHAR = %d\n", SCHAR_MIN); printf("The maximum value of SIGNED CHAR = %d\n", SCHAR_MAX); printf("The maximum value of UNSIGNED CHAR = %d\n", UCHAR_MAX); printf("The minimum value of SHORT INT = %d\n", SHRT_MIN); printf("The maximum value of SHORT INT = %d\n", SHRT_MAX); printf("The minimum value of INT = %d\n", INT_MIN); printf("The maximum value of INT = %d\n", INT_MAX); printf("The minimum value of CHAR = %d\n", CHAR_MIN); printf("The maximum value of CHAR = %d\n", CHAR_MAX); printf("The minimum value of LONG = %ld\n", LONG_MIN); printf("The maximum value of LONG = %ld\n", LONG_MAX); return(0); }
Давайте скомпилируем и запустим вышеуказанную программу, которая даст следующий результат –
The maximum value of UNSIGNED CHAR = 255 The minimum value of SHORT INT = -32768 The maximum value of SHORT INT = 32767 The minimum value of INT = -2147483648 The maximum value of INT = 2147483647 The minimum value of CHAR = -128 The maximum value of CHAR = 127 The minimum value of LONG = -9223372036854775808 The maximum value of LONG = 9223372036854775807
Библиотека C – <locale.h>
Заголовок locale.h определяет специфичные для местоположения настройки, такие как форматы даты и символы валюты. Вы найдете несколько макросов, определенных вместе с важной структурой struct lconv и двумя важными функциями, перечисленными ниже.
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке, и эти макросы будут использоваться в двух функциях, перечисленных ниже:
Sr.No. | Макрос и описание |
---|---|
1 |
LC_ALL Устанавливает все. |
2 |
LC_COLLATE Влияет на функции strcoll и strxfrm. |
3 |
LC_CTYPE Влияет на все функции персонажа. |
4 |
LC_MONETARY Влияет на денежную информацию, предоставляемую функцией localeconv. |
5 |
LC_NUMERIC Влияет на форматирование десятичной точки и информацию, предоставляемую функцией localeconv. |
6 |
LC_TIME Влияет на функцию strftime. |
LC_ALL
Устанавливает все.
LC_COLLATE
Влияет на функции strcoll и strxfrm.
LC_CTYPE
Влияет на все функции персонажа.
LC_MONETARY
Влияет на денежную информацию, предоставляемую функцией localeconv.
LC_NUMERIC
Влияет на форматирование десятичной точки и информацию, предоставляемую функцией localeconv.
LC_TIME
Влияет на функцию strftime.
Функции библиотеки
Ниже приведены функции, определенные в заголовке locale.h –
Sr.No. | Описание функции |
---|---|
1 | char * setlocale (категория int, const char * locale)
Устанавливает или читает информацию, зависящую от местоположения. |
2 | struct lconv * localeconv (void)
Устанавливает или читает информацию, зависящую от местоположения. |
Устанавливает или читает информацию, зависящую от местоположения.
Устанавливает или читает информацию, зависящую от местоположения.
Структура библиотеки
typedef struct { char *decimal_point; char *thousands_sep; char *grouping; char *int_curr_symbol; char *currency_symbol; char *mon_decimal_point; char *mon_thousands_sep; char *mon_grouping; char *positive_sign; char *negative_sign; char int_frac_digits; char frac_digits; char p_cs_precedes; char p_sep_by_space; char n_cs_precedes; char n_sep_by_space; char p_sign_posn; char n_sign_posn; } lconv
Ниже приводится описание каждого из полей –
Sr.No. | Поле и описание |
---|---|
1 |
десятичная точка Десятичный знак, используемый для неденежных значений. |
2 |
thousands_sep Символ разделителя тысяч используется для неденежных значений. |
3 |
группировка Строка, которая указывает размер каждой группы цифр в неденежных количествах. Каждый символ представляет целочисленное значение, которое обозначает количество цифр в текущей группе. Значение 0 означает, что предыдущее значение должно использоваться для остальных групп. |
4 |
int_curr_symbol Это строка используемых международных символов валюты. Первые три символа – это те, которые определены ISO 4217: 1987, а четвертый – символ, который отделяет символ валюты от денежного количества. |
5 |
символ валюты Местный символ используется для валюты. |
6 |
mon_decimal_point Символ десятичной точки, используемый для денежных значений. |
7 |
mon_thousands_sep Символ группирования тысяч, используемый для денежных значений. |
8 |
mon_grouping Строка, элементы которой определяют размер группировки цифр в денежных значениях. Каждый символ представляет целочисленное значение, которое обозначает количество цифр в текущей группе. Значение 0 означает, что предыдущее значение должно использоваться для остальных групп. |
9 |
positive_sign Символ используется для положительных денежных значений. |
10 |
negative_sign Символ, используемый для отрицательных денежных значений. |
11 |
int_frac_digits Количество цифр, отображаемых после десятичной точки в международных денежных значениях. |
12 |
frac_digits Количество цифр после десятичной запятой в денежных значениях. |
13 |
P_cs_precedes лемент Если равно 1, то currency_symbol появляется перед положительным денежным значением. Если равно 0, то currency_symbol появляется после положительного денежного значения. |
14 |
p_sep_by_space Если равно 1, то currency_symbol отделяется пробелом от положительного денежного значения. Если равно 0, то между currency_symbol и положительным денежным значением нет пробела. |
15 |
n_cs_precedes Если равно 1, то currency_symbol предшествует отрицательному денежному значению. Если равно 0, то currency_symbol следует отрицательное денежное значение. |
16 |
n_sep_by_space Если равно 1, то currency_symbol отделяется пробелом от отрицательного денежного значения. Если равно 0, то между currency_symbol и отрицательным денежным значением нет пробела. |
17 |
p_sign_posn Представляет позицию positive_sign в положительном денежном выражении. |
18 |
n_sign_posn Представляет позицию отрицательного знака в отрицательном денежном выражении. |
десятичная точка
Десятичный знак, используемый для неденежных значений.
thousands_sep
Символ разделителя тысяч используется для неденежных значений.
группировка
Строка, которая указывает размер каждой группы цифр в неденежных количествах. Каждый символ представляет целочисленное значение, которое обозначает количество цифр в текущей группе. Значение 0 означает, что предыдущее значение должно использоваться для остальных групп.
int_curr_symbol
Это строка используемых международных символов валюты. Первые три символа – это те, которые определены ISO 4217: 1987, а четвертый – символ, который отделяет символ валюты от денежного количества.
символ валюты
Местный символ используется для валюты.
mon_decimal_point
Символ десятичной точки, используемый для денежных значений.
mon_thousands_sep
Символ группирования тысяч, используемый для денежных значений.
mon_grouping
Строка, элементы которой определяют размер группировки цифр в денежных значениях. Каждый символ представляет целочисленное значение, которое обозначает количество цифр в текущей группе. Значение 0 означает, что предыдущее значение должно использоваться для остальных групп.
positive_sign
Символ используется для положительных денежных значений.
negative_sign
Символ, используемый для отрицательных денежных значений.
int_frac_digits
Количество цифр, отображаемых после десятичной точки в международных денежных значениях.
frac_digits
Количество цифр после десятичной запятой в денежных значениях.
P_cs_precedes лемент
Если равно 1, то currency_symbol появляется перед положительным денежным значением. Если равно 0, то currency_symbol появляется после положительного денежного значения.
p_sep_by_space
Если равно 1, то currency_symbol отделяется пробелом от положительного денежного значения. Если равно 0, то между currency_symbol и положительным денежным значением нет пробела.
n_cs_precedes
Если равно 1, то currency_symbol предшествует отрицательному денежному значению. Если равно 0, то currency_symbol следует отрицательное денежное значение.
n_sep_by_space
Если равно 1, то currency_symbol отделяется пробелом от отрицательного денежного значения. Если равно 0, то между currency_symbol и отрицательным денежным значением нет пробела.
p_sign_posn
Представляет позицию positive_sign в положительном денежном выражении.
n_sign_posn
Представляет позицию отрицательного знака в отрицательном денежном выражении.
Следующие значения используются для p_sign_posn и n_sign_posn –
Значение | Описание |
---|---|
0 | Круглые скобки заключают в себе значение и currency_symbol. |
1 | Знак предшествует значению и currency_symbol. |
2 | Знак следует за значением и currency_symbol. |
3 | Знак непосредственно предшествует значению и currency_symbol. |
4 | Знак сразу следует за значением и currency_symbol. |
Библиотека C – <math.h>
Заголовок math.h определяет различные математические функции и один макрос. Все функции, доступные в этой библиотеке, принимают аргумент double и возвращают результат double .
Макросы библиотеки
В этой библиотеке определен только один макрос –
Sr.No. | Макрос и описание |
---|---|
1 |
HUGE_VAL Этот макрос используется, когда результат функции не может быть представлен в виде числа с плавающей запятой. Если величина правильного результата слишком велика для представления, функция устанавливает значение errno на ERANGE, чтобы указать ошибку диапазона, и возвращает конкретное, очень большое значение, названное макросом HUGE_VAL или его отрицанием (- HUGE_VAL). Если величина результата слишком мала, вместо этого возвращается нулевое значение. В этом случае errno может быть или не быть установлен в ERANGE. |
HUGE_VAL
Этот макрос используется, когда результат функции не может быть представлен в виде числа с плавающей запятой. Если величина правильного результата слишком велика для представления, функция устанавливает значение errno на ERANGE, чтобы указать ошибку диапазона, и возвращает конкретное, очень большое значение, названное макросом HUGE_VAL или его отрицанием (- HUGE_VAL).
Если величина результата слишком мала, вместо этого возвращается нулевое значение. В этом случае errno может быть или не быть установлен в ERANGE.
Функции библиотеки
Ниже приведены функции, определенные в заголовке math.h –
Sr.No. | Описание функции |
---|---|
1 | двойной акос (двойной х)
Возвращает арккосинус x в радианах. |
2 | двойной асин (двойной х)
Возвращает арксинус x в радианах. |
3 | двойной атан (двойной х)
Возвращает арктангенс х в радианах. |
4 | двойной atan2 (двойной у, двойной х)
Возвращает арктангенс в радианах y / x на основе знаков обоих значений, чтобы определить правильный квадрант. |
5 | двойной cos (double x)
Возвращает косинус радиального угла x. |
6 | двойной кош (двойной х)
Возвращает гиперболический косинус x. |
7 | двойной грех (двойной х)
Возвращает синус радиального угла x. |
8 | двойной грех (двойной х)
Возвращает гиперболический синус x. |
9 | двойной танх (двойной х)
Возвращает гиперболический тангенс x. |
10 | двойной опыт (двойной х)
Возвращает значение е, возведенное в x-ю степень. |
11 | double frexp (double x, int * exponent)
Возвращаемое значение – это мантисса, а целое число, на которое указывает показатель степени, – это показатель степени. Результирующее значение равно x = мантисса * 2 ^ экспонента. |
12 | double ldexp (double x, int exponent)
Возвращает x, умноженное на 2, возведенное в степень степени. |
13 | двойной журнал (двойной х)
Возвращает натуральный логарифм (логарифм base-e) x . |
14 | двойной log10 (двойной х)
Возвращает общий логарифм (логарифм с основанием 10) для x . |
15 | double modf (double x, double * integer)
Возвращаемое значение является компонентом дроби (часть после десятичной дроби) и устанавливает целочисленное значение для целочисленного компонента. |
16 | двойной пау (двойной х, двойной у)
Возвращает x, возведенное в степень y . |
17 | двойной квадрат (двойной х)
Возвращает квадратный корень из х . |
18 | двойной потолок (двойной х)
Возвращает наименьшее целочисленное значение, большее или равное x . |
19 | двойные fabs (двойной х)
Возвращает абсолютное значение х . |
20 | двойной пол (двойной х)
Возвращает наибольшее целочисленное значение, меньшее или равное x . |
21 | двойной fmod (двойной х, двойной у)
Возвращает остаток от x, деленный на y . |
Возвращает арккосинус x в радианах.
Возвращает арксинус x в радианах.
Возвращает арктангенс х в радианах.
Возвращает арктангенс в радианах y / x на основе знаков обоих значений, чтобы определить правильный квадрант.
Возвращает косинус радиального угла x.
Возвращает гиперболический косинус x.
Возвращает синус радиального угла x.
Возвращает гиперболический синус x.
Возвращает гиперболический тангенс x.
Возвращает значение е, возведенное в x-ю степень.
Возвращаемое значение – это мантисса, а целое число, на которое указывает показатель степени, – это показатель степени. Результирующее значение равно x = мантисса * 2 ^ экспонента.
Возвращает x, умноженное на 2, возведенное в степень степени.
Возвращает натуральный логарифм (логарифм base-e) x .
Возвращает общий логарифм (логарифм с основанием 10) для x .
Возвращаемое значение является компонентом дроби (часть после десятичной дроби) и устанавливает целочисленное значение для целочисленного компонента.
Возвращает x, возведенное в степень y .
Возвращает квадратный корень из х .
Возвращает наименьшее целочисленное значение, большее или равное x .
Возвращает абсолютное значение х .
Возвращает наибольшее целочисленное значение, меньшее или равное x .
Возвращает остаток от x, деленный на y .
Библиотека C – <setjmp.h>
Заголовок setjmp.h определяет макрос setjmp () , одну функцию longjmp () и одну переменную типа jmp_buf для обхода обычного вызова функции и возврата.
Переменные библиотеки
Ниже приведен тип переменной, определенный в заголовке setjmp.h –
Sr.No. | Переменная и описание |
---|---|
1 |
jmp_buf Это тип массива, используемый для хранения информации для макроса setjmp () и функции longjmp () . |
jmp_buf
Это тип массива, используемый для хранения информации для макроса setjmp () и функции longjmp () .
Макросы библиотеки
В этой библиотеке определен только один макрос –
Sr.No. | Макрос и описание |
---|---|
1 | int setjmp (среда jmp_buf)
Этот макрос сохраняет текущую среду в переменную среду для последующего использования функцией longjmp () . Если этот макрос возвращается непосредственно из вызова макроса, он возвращает ноль, но если он возвращается из вызова функции longjmp () , то возвращается ненулевое значение. |
Этот макрос сохраняет текущую среду в переменную среду для последующего использования функцией longjmp () . Если этот макрос возвращается непосредственно из вызова макроса, он возвращает ноль, но если он возвращается из вызова функции longjmp () , то возвращается ненулевое значение.
Функции библиотеки
Ниже приводится единственная функция, определенная в заголовке setjmp.h:
Sr.No. | Описание функции |
---|---|
1 | void longjmp (окружение jmp_buf, значение int)
Эта функция восстанавливает среду, сохраненную последним вызовом макроса setjmp () при том же вызове программы с соответствующим аргументом jmp_buf . |
Эта функция восстанавливает среду, сохраненную последним вызовом макроса setjmp () при том же вызове программы с соответствующим аргументом jmp_buf .
Библиотека C – <signal.h>
Заголовок signal.h определяет тип переменной sig_atomic_t , два вызова функций и несколько макросов для обработки различных сигналов, сообщаемых во время выполнения программы.
Переменные библиотеки
Ниже приведен тип переменной, определенный в заголовке signal.h –
Sr.No. | Переменная и описание |
---|---|
1 |
sig_atomic_t Это тип int и используется в качестве переменной в обработчике сигнала. Это интегральный тип объекта, к которому можно обращаться как к элементарному объекту, даже при наличии асинхронных сигналов. |
sig_atomic_t
Это тип int и используется в качестве переменной в обработчике сигнала. Это интегральный тип объекта, к которому можно обращаться как к элементарному объекту, даже при наличии асинхронных сигналов.
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке signal.h, и эти макросы будут использоваться в двух функциях, перечисленных ниже. Макросы SIG_ используются с функцией сигнала для определения функций сигнала.
Sr.No. | Макрос и описание |
---|---|
1 |
SIG_DFL Обработчик сигналов по умолчанию. |
2 |
SIG_ERR Представляет ошибку сигнала. |
3 |
SIG_IGN Сигнал игнорировать. |
SIG_DFL
Обработчик сигналов по умолчанию.
SIG_ERR
Представляет ошибку сигнала.
SIG_IGN
Сигнал игнорировать.
Макросы SIG используются для представления номера сигнала в следующих условиях:
Sr.No. | Макрос и описание |
---|---|
1 |
SIGABRT Аварийное завершение программы. |
2 |
SIGFPE Ошибка с плавающей точкой, например деление на ноль. |
3 |
SIGILL Незаконная операция. |
4 |
SIGINT Сигнал прерывания, такой как Ctrl-C. |
5 |
SIGSEGV Неверный доступ к хранилищу из-за нарушения сегмента. |
6 |
SIGTERM Запрос на прекращение. |
SIGABRT
Аварийное завершение программы.
SIGFPE
Ошибка с плавающей точкой, например деление на ноль.
SIGILL
Незаконная операция.
SIGINT
Сигнал прерывания, такой как Ctrl-C.
SIGSEGV
Неверный доступ к хранилищу из-за нарушения сегмента.
SIGTERM
Запрос на прекращение.
Функции библиотеки
Ниже приведены функции, определенные в заголовке signal.h –
Sr.No. | Описание функции |
---|---|
1 | void (* сигнал (int sig, void (* func) (int))) (int)
Эта функция устанавливает функцию для обработки сигнала, т.е. обработчик сигнала. |
2 | Int рейз (Int Sig)
Эта функция вызывает генерирование сигнала sig . Аргумент sig совместим с макросами SIG. |
Эта функция устанавливает функцию для обработки сигнала, т.е. обработчик сигнала.
Эта функция вызывает генерирование сигнала sig . Аргумент sig совместим с макросами SIG.
Библиотека C – <stdarg.h>
Заголовок stdarg.h определяет тип переменной va_list и три макроса, которые можно использовать для получения аргументов в функции, когда число аргументов неизвестно, т.е. переменное количество аргументов.
Функция переменных аргументов определяется с помощью многоточия (, …) в конце списка параметров.
Переменные библиотеки
Ниже приведен тип переменной, определенный в заголовке stdarg.h.
Sr.No. | Переменная и описание |
---|---|
1 |
va_list Этот тип подходит для хранения информации, необходимой для трех макросов va_start (), va_arg () и va_end () . |
va_list
Этот тип подходит для хранения информации, необходимой для трех макросов va_start (), va_arg () и va_end () .
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке stdarg.h.
Sr.No. | Макрос и описание |
---|---|
1 | void va_start (va_list ap, last_arg)
Этот макрос инициализирует переменную ap для использования с макросами va_arg и va_end . Last_arg – это последний известный фиксированный аргумент, передаваемый в функцию, т.е. аргумент перед многоточием. |
2 | тип va_arg (va_list ap, тип)
Этот макрос извлекает следующий аргумент в списке параметров функции с типом type . |
3 | void va_end (va_list ap)
Этот макрос позволяет функции с переменными аргументами использовать макрос va_start для возврата. Если va_end не вызывается до возврата из функции, результат не определен. |
Этот макрос инициализирует переменную ap для использования с макросами va_arg и va_end . Last_arg – это последний известный фиксированный аргумент, передаваемый в функцию, т.е. аргумент перед многоточием.
Этот макрос извлекает следующий аргумент в списке параметров функции с типом type .
Этот макрос позволяет функции с переменными аргументами использовать макрос va_start для возврата. Если va_end не вызывается до возврата из функции, результат не определен.
Библиотека C – <stddef.h>
Заголовок stddef.h определяет различные типы переменных и макросы. Многие из этих определений также появляются в других заголовках.
Переменные библиотеки
Ниже приведены типы переменных, определенные в заголовке stddef.h.
Sr.No. | Переменная и описание |
---|---|
1 |
ptrdiff_t Это целочисленный тип со знаком и результат вычитания двух указателей. |
2 |
size_t Это целочисленный тип без знака и результат ключевого слова sizeof . |
3 |
wchar_t Это интегральный тип размера константы широкого символа. |
ptrdiff_t
Это целочисленный тип со знаком и результат вычитания двух указателей.
size_t
Это целочисленный тип без знака и результат ключевого слова sizeof .
wchar_t
Это интегральный тип размера константы широкого символа.
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке stddef.h.
Sr.No. | Макрос и описание |
---|---|
1 | НОЛЬ
Этот макрос является значением константы нулевого указателя. |
2 | offsetof (тип, член-указатель)
Это приводит к постоянному целому числу типа size_t, которое является смещением в байтах элемента структуры от начала структуры. Член задается указателем члена , а имя структуры указывается в типе . |
Этот макрос является значением константы нулевого указателя.
Это приводит к постоянному целому числу типа size_t, которое является смещением в байтах элемента структуры от начала структуры. Член задается указателем члена , а имя структуры указывается в типе .
Библиотека C – <stdio.h>
Заголовок stdio.h определяет три типа переменных, несколько макросов и различные функции для выполнения ввода и вывода.
Переменные библиотеки
Ниже приведены типы переменных, определенные в заголовке stdio.h.
Sr.No. | Переменная и описание |
---|---|
1 |
size_t Это целочисленный тип без знака и результат ключевого слова sizeof . |
2 |
ФАЙЛ Это тип объекта, подходящий для хранения информации для файлового потока. |
3 |
fpos_t Это тип объекта, подходящий для хранения любой позиции в файле. |
size_t
Это целочисленный тип без знака и результат ключевого слова sizeof .
ФАЙЛ
Это тип объекта, подходящий для хранения информации для файлового потока.
fpos_t
Это тип объекта, подходящий для хранения любой позиции в файле.
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке stdio.h.
Sr.No. | Макрос и описание |
---|---|
1 |
НОЛЬ Этот макрос является значением константы нулевого указателя. |
2 |
_IOFBF, _IOLBF и _IONBF Это макросы, которые расширяются до целочисленных константных выражений с различными значениями и подходят для использования в качестве третьего аргумента функции setvbuf . |
3 |
BUFSIZ Этот макрос является целым числом, которое представляет размер буфера, используемого функцией setbuf . |
4 |
EOF Этот макрос является отрицательным целым числом, которое указывает, что достигнут конец файла. |
5 |
FOPEN_MAX Этот макрос представляет собой целое число, представляющее максимальное количество файлов, которые система может гарантировать одновременное открытие. |
6 |
FILENAME_MAX Этот макрос является целым числом, представляющим самую длинную длину массива символов, подходящую для хранения максимально длинного имени файла. Если реализация не накладывает ограничений, то это значение должно быть рекомендуемым максимальным значением. |
7 |
L_tmpnam Этот макрос является целым числом, представляющим наибольшую длину массива символов, подходящего для хранения максимально длинного временного имени файла, созданного функцией tmpnam . |
8 |
SEEK_CUR, SEEK_END и SEEK_SET Эти макросы используются в функции fseek для поиска различных позиций в файле. |
9 |
TMP_MAX Этот макрос – максимальное количество уникальных имен файлов, которые может сгенерировать функция tmpnam . |
10 |
stderr, stdin и stdout Эти макросы являются указателями на типы FILE, которые соответствуют стандартной ошибке, стандартному вводу и стандартным выходным потокам. |
НОЛЬ
Этот макрос является значением константы нулевого указателя.
_IOFBF, _IOLBF и _IONBF
Это макросы, которые расширяются до целочисленных константных выражений с различными значениями и подходят для использования в качестве третьего аргумента функции setvbuf .
BUFSIZ
Этот макрос является целым числом, которое представляет размер буфера, используемого функцией setbuf .
EOF
Этот макрос является отрицательным целым числом, которое указывает, что достигнут конец файла.
FOPEN_MAX
Этот макрос представляет собой целое число, представляющее максимальное количество файлов, которые система может гарантировать одновременное открытие.
FILENAME_MAX
Этот макрос является целым числом, представляющим самую длинную длину массива символов, подходящую для хранения максимально длинного имени файла. Если реализация не накладывает ограничений, то это значение должно быть рекомендуемым максимальным значением.
L_tmpnam
Этот макрос является целым числом, представляющим наибольшую длину массива символов, подходящего для хранения максимально длинного временного имени файла, созданного функцией tmpnam .
SEEK_CUR, SEEK_END и SEEK_SET
Эти макросы используются в функции fseek для поиска различных позиций в файле.
TMP_MAX
Этот макрос – максимальное количество уникальных имен файлов, которые может сгенерировать функция tmpnam .
stderr, stdin и stdout
Эти макросы являются указателями на типы FILE, которые соответствуют стандартной ошибке, стандартному вводу и стандартным выходным потокам.
Функции библиотеки
Ниже приведены функции, определенные в заголовке stdio.h.
Следуйте той же последовательности функций для лучшего понимания и использования опции Try it (Online compiler), потому что файл, созданный в первой функции, будет использоваться в последующих функциях.
Sr.No. | Описание функции |
---|---|
1 | int fclose (FILE * stream)
Закрывает поток. Все буферы сброшены. |
2 | void clearerr (FILE * stream)
Очищает конец файла и индикаторы ошибок для данного потока. |
3 | int feof (FILE * stream)
Проверяет индикатор конца файла для данного потока. |
4 | int ferror (FILE * stream)
Проверяет индикатор ошибки для данного потока. |
5 | int fflush (FILE * stream)
Очищает выходной буфер потока. |
6 | int fgetpos (FILE * stream, fpos_t * pos)
Получает текущую позицию файла потока и записывает его в поз. |
7 | FILE * fopen (const char * имя файла, режим const char *)
Открывает имя файла, на которое указывает имя файла, используя данный режим. |
8 | size_t fread (void * ptr, size_t size, size_t nmemb, FILE * stream)
Считывает данные из данного потока в массив, на который указывает ptr. |
9 | FILE * freopen (const char * имя файла, режим const char *, FILE * stream)
Связывает новое имя файла с заданным открытым потоком и одновременно закрывает старый файл в потоке. |
10 | int fseek (FILE * stream, long int offset, int fromce)
Устанавливает файловую позицию потока в заданное смещение. Смещение аргумента означает количество байтов, которые нужно найти из заданной позиции откуда . |
11 | int fsetpos (FILE * stream, const fpos_t * pos)
Устанавливает файловую позицию данного потока в данную позицию. Аргумент pos – это позиция, заданная функцией fgetpos. |
12 | long int ftell (FILE * stream)
Возвращает текущую позицию файла данного потока. |
13 | size_t fwrite (const void * ptr, size_t size, size_t nmemb, FILE * stream)
Записывает данные из массива, на который указывает ptr, в данный поток. |
14 | int удалить (const char * имя файла)
Удаляет указанное имя файла, чтобы оно больше не было доступно. |
15 | int rename (const char * old_filename, const char * new_filename)
Вызывает изменение имени файла, на которое ссылается old_filename, на new_filename. |
16 | перемотка void (FILE * stream)
Устанавливает позицию файла в начало файла данного потока. |
17 | void setbuf (FILE * stream, char * buffer)
Определяет, как поток должен быть буферизован. |
18 | int setvbuf (FILE * stream, char * buffer, int mode, size_t size)
Другая функция, чтобы определить, как поток должен быть буферизован. |
19 | FILE * tmpfile (void)
Создает временный файл в двоичном режиме обновления (wb +). |
20 | char * tmpnam (char * str)
Создает и возвращает действительное временное имя файла, которое не существует. |
21 | int fprintf (FILE * stream, const char * format, …)
Отправляет форматированный вывод в поток. |
22 | int printf (const char * format, …)
Отправляет отформатированный вывод на стандартный вывод. |
23 | int sprintf (char * str, const char * format, …)
Отправляет отформатированный вывод в строку. |
24 | int vfprintf (FILE * stream, const char * format, va_list arg)
Отправляет форматированный вывод в поток, используя список аргументов. |
25 | int vprintf (const char * format, va_list arg)
Отправляет отформатированный вывод на стандартный вывод, используя список аргументов. |
26 | int vsprintf (char * str, const char * format, va_list arg)
Отправляет форматированный вывод в строку, используя список аргументов. |
27 | int fscanf (FILE * stream, const char * format, …)
Читает форматированный ввод из потока. |
28 | int scanf (const char * format, …)
Читает форматированный ввод из стандартного ввода. |
29 | int sscanf (const char * str, const char * format, …)
Читает форматированный ввод из строки. |
30 | int fgetc (FILE * stream)
Получает следующий символ (символ без знака) из указанного потока и перемещает индикатор положения для потока. |
31 | char * fgets (char * str, int n, FILE * stream)
Читает строку из указанного потока и сохраняет ее в строке, на которую указывает str. Он останавливается, когда читается (n-1) символов, читается символ новой строки или достигается конец файла, в зависимости от того, что произойдет раньше. |
32 | int fputc (int char, FILE * stream)
Записывает символ (беззнаковый символ), указанный аргументом char, в указанный поток и перемещает индикатор положения для потока. |
33 | int fputs (const char * str, FILE * stream)
Записывает строку в указанный поток до, но не включая нулевой символ. |
34 | int getc (FILE * stream)
Получает следующий символ (символ без знака) из указанного потока и перемещает индикатор положения для потока. |
35 | int getchar (void)
Получает символ (без знака) из стандартного ввода. |
36 | char * gets (char * str)
Читает строку из stdin и сохраняет ее в строке, на которую указывает str. Он останавливается, когда читается символ новой строки или достигается конец файла, в зависимости от того, что произойдет раньше. |
37 | int putc (int char, FILE * stream)
Записывает символ (беззнаковый символ), указанный аргументом char, в указанный поток и перемещает индикатор положения для потока. |
38 | int putchar (int char)
Записывает символ (беззнаковый символ), указанный в аргументе char, в стандартный вывод. |
39 | int ставит (const char * str)
Записывает строку в стандартный вывод, но не включая нулевой символ. Символ новой строки добавляется к выводу. |
40 | int ungetc (int char, FILE * stream)
Вставляет символ char (без знака) в указанный поток, чтобы следующий символ был прочитан. |
41 | void perror (const char * str)
Печатает описательное сообщение об ошибке в stderr. Сначала печатается строка str, затем двоеточие, а затем пробел. |
Закрывает поток. Все буферы сброшены.
Очищает конец файла и индикаторы ошибок для данного потока.
Проверяет индикатор конца файла для данного потока.
Проверяет индикатор ошибки для данного потока.
Очищает выходной буфер потока.
Получает текущую позицию файла потока и записывает его в поз.
Открывает имя файла, на которое указывает имя файла, используя данный режим.
Считывает данные из данного потока в массив, на который указывает ptr.
Связывает новое имя файла с заданным открытым потоком и одновременно закрывает старый файл в потоке.
Устанавливает файловую позицию потока в заданное смещение. Смещение аргумента означает количество байтов, которые нужно найти из заданной позиции откуда .
Устанавливает файловую позицию данного потока в данную позицию. Аргумент pos – это позиция, заданная функцией fgetpos.
Возвращает текущую позицию файла данного потока.
Записывает данные из массива, на который указывает ptr, в данный поток.
Удаляет указанное имя файла, чтобы оно больше не было доступно.
Вызывает изменение имени файла, на которое ссылается old_filename, на new_filename.
Устанавливает позицию файла в начало файла данного потока.
Определяет, как поток должен быть буферизован.
Другая функция, чтобы определить, как поток должен быть буферизован.
Создает временный файл в двоичном режиме обновления (wb +).
Создает и возвращает действительное временное имя файла, которое не существует.
Отправляет форматированный вывод в поток.
Отправляет отформатированный вывод на стандартный вывод.
Отправляет отформатированный вывод в строку.
Отправляет форматированный вывод в поток, используя список аргументов.
Отправляет отформатированный вывод на стандартный вывод, используя список аргументов.
Отправляет форматированный вывод в строку, используя список аргументов.
Читает форматированный ввод из потока.
Читает форматированный ввод из стандартного ввода.
Читает форматированный ввод из строки.
Получает следующий символ (символ без знака) из указанного потока и перемещает индикатор положения для потока.
Читает строку из указанного потока и сохраняет ее в строке, на которую указывает str. Он останавливается, когда читается (n-1) символов, читается символ новой строки или достигается конец файла, в зависимости от того, что произойдет раньше.
Записывает символ (беззнаковый символ), указанный аргументом char, в указанный поток и перемещает индикатор положения для потока.
Записывает строку в указанный поток до, но не включая нулевой символ.
Получает следующий символ (символ без знака) из указанного потока и перемещает индикатор положения для потока.
Получает символ (без знака) из стандартного ввода.
Читает строку из stdin и сохраняет ее в строке, на которую указывает str. Он останавливается, когда читается символ новой строки или достигается конец файла, в зависимости от того, что произойдет раньше.
Записывает символ (беззнаковый символ), указанный аргументом char, в указанный поток и перемещает индикатор положения для потока.
Записывает символ (беззнаковый символ), указанный в аргументе char, в стандартный вывод.
Записывает строку в стандартный вывод, но не включая нулевой символ. Символ новой строки добавляется к выводу.
Вставляет символ char (без знака) в указанный поток, чтобы следующий символ был прочитан.
Печатает описательное сообщение об ошибке в stderr. Сначала печатается строка str, затем двоеточие, а затем пробел.
Библиотека C – <stdlib.h>
Заголовок stdlib.h определяет четыре типа переменных, несколько макросов и различные функции для выполнения общих функций.
Переменные библиотеки
Ниже приведены типы переменных, определенные в заголовке stdlib.h.
Sr.No. | Переменная и описание |
---|---|
1 |
size_t Это целочисленный тип без знака и результат ключевого слова sizeof . |
2 |
wchar_t Это целочисленный тип размера константы широких символов. |
3 |
div_t Это структура, возвращаемая функцией div . |
4 |
ldiv_t Это структура, возвращаемая функцией ldiv . |
size_t
Это целочисленный тип без знака и результат ключевого слова sizeof .
wchar_t
Это целочисленный тип размера константы широких символов.
div_t
Это структура, возвращаемая функцией div .
ldiv_t
Это структура, возвращаемая функцией ldiv .
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке stdlib.h.
Sr.No. | Макрос и описание |
---|---|
1 |
НОЛЬ Этот макрос является значением константы нулевого указателя. |
2 |
EXIT_FAILURE Это значение для функции выхода, возвращаемой в случае сбоя. |
3 |
EXIT_SUCCESS Это значение для функции выхода, возвращаемой в случае успеха. |
4 |
RAND_MAX Этот макрос является максимальным значением, возвращаемым функцией rand. |
5 |
MB_CUR_MAX Этот макрос является максимальным числом байтов в многобайтовом наборе символов, которое не может быть больше, чем MB_LEN_MAX. |
НОЛЬ
Этот макрос является значением константы нулевого указателя.
EXIT_FAILURE
Это значение для функции выхода, возвращаемой в случае сбоя.
EXIT_SUCCESS
Это значение для функции выхода, возвращаемой в случае успеха.
RAND_MAX
Этот макрос является максимальным значением, возвращаемым функцией rand.
MB_CUR_MAX
Этот макрос является максимальным числом байтов в многобайтовом наборе символов, которое не может быть больше, чем MB_LEN_MAX.
Функции библиотеки
Ниже приведены функции, определенные в заголовке stdio.h.
Sr.No. | Описание функции |
---|---|
1 | двойной atof (const char * str)
Преобразует строку, на которую указывает аргумент str, в число с плавающей запятой (тип double). |
2 | int atoi (const char * str)
Преобразует строку, на которую указывает аргумент str, в целое число (тип int). |
3 | long int atol (const char * str)
Преобразует строку, на которую указывает аргумент str, в длинное целое число (введите long int). |
4 | double strtod (const char * str, char ** endptr)
Преобразует строку, на которую указывает аргумент str, в число с плавающей запятой (тип double). |
5 | long int strtol (const char * str, char ** endptr, int base)
Преобразует строку, на которую указывает аргумент str, в длинное целое число (введите long int). |
6 | unsigned long int strtoul (const char * str, char ** endptr, int base)
Преобразует строку, на которую указывает аргумент str, в целое число без знака (введите unsigned long int). |
7 | void * calloc (size_t nitems, size_t size)
Выделяет запрошенную память и возвращает указатель на нее. |
8 | пусто (пусто * ptr
Выделение памяти, ранее выделенной вызовом calloc, malloc или realloc . |
9 | void * malloc (size_t size)
Выделяет запрошенную память и возвращает указатель на нее. |
10 | void * realloc (void * ptr, size_t size)
Попытки изменить размер блока памяти, на который указывает ptr, который ранее был выделен при вызове malloc или calloc . |
11 | void abort (void)
Вызывает ненормальное завершение программы. |
12 | int atexit (void (* func) (void))
Вызывает вызов указанной функции func при нормальном завершении программы. |
13 | Пустой выход (статус int)
Заставляет программу завершаться нормально. |
14 | char * getenv (const char * name)
Ищет строку среды, на которую указывает имя, и возвращает соответствующее значение в строку. |
15 | int system (const char * string)
Команда, указанная в строке, передается в хост-среду для выполнения командным процессором. |
16 | void * bsearch (const void * key, const void * base, size_t nitems, size_t size, int (* сравнение) (const void *, const void *))
Выполняет бинарный поиск. |
17 | void qsort (void * base, size_t nitems, size_t size, int (* сравнение) (const void *, const void *))
Сортирует массив. |
18 | int abs (int x)
Возвращает абсолютное значение х. |
19 | div_t div (int numer, int denom)
Делит число (числитель) на число (знаменатель). |
20 | long int labs (long int x)
Возвращает абсолютное значение х. |
21 | ldiv_t ldiv (длинный int numer, длинный int denom)
Делит число (числитель) на число (знаменатель). |
22 | int rand (void)
Возвращает псевдослучайное число в диапазоне от 0 до RAND_MAX . |
23 | void srand (без знака int seed)
Эта функция запускает генератор случайных чисел, используемый функцией rand . |
24 | int mblen (const char * str, size_t n)
Возвращает длину многобайтового символа, на который указывает аргумент str . |
25 | size_t mbstowcs (schar_t * pwcs, const char * str, size_t n)
Преобразует строку многобайтовых символов, на которые указывает аргумент str, в массив, на который указывает pwcs . |
26 | int mbtowc (whcar_t * pwc, const char * str, size_t n)
Исследует многобайтовый символ, на который указывает аргумент str . |
27 | size_t wcstombs (char * str, const wchar_t * pwcs, size_t n)
Преобразует коды, хранящиеся в массиве pwcs, в многобайтовые символы и сохраняет их в строке str . |
28 | int wctomb (char * str, wchar_t wchar)
Исследует код, который соответствует многобайтовому символу, заданному аргументом wchar . |
Преобразует строку, на которую указывает аргумент str, в число с плавающей запятой (тип double).
Преобразует строку, на которую указывает аргумент str, в целое число (тип int).
Преобразует строку, на которую указывает аргумент str, в длинное целое число (введите long int).
Преобразует строку, на которую указывает аргумент str, в число с плавающей запятой (тип double).
Преобразует строку, на которую указывает аргумент str, в длинное целое число (введите long int).
Преобразует строку, на которую указывает аргумент str, в целое число без знака (введите unsigned long int).
Выделяет запрошенную память и возвращает указатель на нее.
Выделение памяти, ранее выделенной вызовом calloc, malloc или realloc .
Выделяет запрошенную память и возвращает указатель на нее.
Попытки изменить размер блока памяти, на который указывает ptr, который ранее был выделен при вызове malloc или calloc .
Вызывает ненормальное завершение программы.
Вызывает вызов указанной функции func при нормальном завершении программы.
Заставляет программу завершаться нормально.
Ищет строку среды, на которую указывает имя, и возвращает соответствующее значение в строку.
Команда, указанная в строке, передается в хост-среду для выполнения командным процессором.
Выполняет бинарный поиск.
Сортирует массив.
Возвращает абсолютное значение х.
Делит число (числитель) на число (знаменатель).
Возвращает абсолютное значение х.
Делит число (числитель) на число (знаменатель).
Возвращает псевдослучайное число в диапазоне от 0 до RAND_MAX .
Эта функция запускает генератор случайных чисел, используемый функцией rand .
Возвращает длину многобайтового символа, на который указывает аргумент str .
Преобразует строку многобайтовых символов, на которые указывает аргумент str, в массив, на который указывает pwcs .
Исследует многобайтовый символ, на который указывает аргумент str .
Преобразует коды, хранящиеся в массиве pwcs, в многобайтовые символы и сохраняет их в строке str .
Исследует код, который соответствует многобайтовому символу, заданному аргументом wchar .
Библиотека C – <string.h>
Заголовок string.h определяет один тип переменной, один макрос и различные функции для манипулирования массивами символов.
Переменные библиотеки
Ниже приведен тип переменной, определенный в заголовке string.h –
Sr.No. | Переменная и описание |
---|---|
1 |
size_t Это целочисленный тип без знака и результат ключевого слова sizeof . |
size_t
Это целочисленный тип без знака и результат ключевого слова sizeof .
Макросы библиотеки
Ниже приведен макрос, определенный в заголовке string.h –
Sr.No. | Макрос и описание |
---|---|
1 |
НОЛЬ Этот макрос является значением константы нулевого указателя. |
НОЛЬ
Этот макрос является значением константы нулевого указателя.
Функции библиотеки
Ниже приведены функции, определенные в заголовке string.h –
Sr.No. | Описание функции |
---|---|
1 | void * memchr (const void * str, int c, size_t n)
Ищет первое вхождение символа c (символ без знака) в первых n байтах строки, на которую указывает аргумент str . |
2 | int memcmp (const void * str1, const void * str2, size_t n)
Сравнивает первые n байтов str1 и str2 . |
3 | void * memcpy (void * dest, const void * src, size_t n)
Копирует n символов из src в dest . |
4 | void * memmove (void * dest, const void * src, size_t n)
Еще одна функция для копирования n символов из str2 в str1 . |
5 | void * memset (void * str, int c, size_t n)
Копирует символ c (символ без знака) в первые n символов строки, на которую указывает аргумент str . |
6 | char * strcat (char * dest, const char * src)
Добавляет строку, на которую указывает src, в конец строки, на которую указывает dest . |
7 | char * strncat (char * dest, const char * src, size_t n)
Добавляет строку, на которую указывает src, в конец строки, на которую указывает dest, длиной до n символов. |
8 | char * strchr (const char * str, int c)
Ищет первое вхождение символа c (символ без знака) в строке, на которую указывает аргумент str . |
9 | int strcmp (const char * str1, const char * str2)
Сравнивает строку, на которую указывает str1, со строкой, на которую указывает str2 . |
10 | int strncmp (const char * str1, const char * str2, size_t n)
Сравнивает не более первых n байтов str1 и str2 . |
11 | int strcoll (const char * str1, const char * str2)
Сравнивает строку str1 с str2 . Результат зависит от настройки местоположения LC_COLLATE. |
12 | char * strcpy (char * dest, const char * src)
Копирует указанную строку с помощью src в dest . |
13 | char * strncpy (char * dest, const char * src, size_t n)
Копирует до n символов из строки, на которую указывает src в dest . |
14 | size_t strcspn (const char * str1, const char * str2)
Вычисляет длину начального сегмента str1, который полностью состоит из символов, не входящих в str2. |
15 | char * strerror (int errnum)
Ищет во внутреннем массиве номер ошибки errnum и возвращает указатель на строку сообщения об ошибке. |
16 | size_t strlen (const char * str)
Вычисляет длину строки str до, но не включая завершающий нулевой символ. |
17 | char * strpbrk (const char * str1, const char * str2)
Находит первый символ в строке str1, который соответствует любому символу, указанному в str2 . |
18 | char * strrchr (const char * str, int c)
Ищет последнее вхождение символа c (символ без знака) в строке, на которую указывает аргумент str . |
19 | size_t strspn (const char * str1, const char * str2)
Вычисляет длину начального сегмента str1, который полностью состоит из символов в str2 . |
20 | char * strstr (const char * стог сена, const char * игла)
Находит первое вхождение всей строковой стрелки (не включая завершающий нулевой символ), которая появляется в стоге сена . |
21 | char * strtok (char * str, const char * delim)
Разбивает строку str на серию токенов, разделенных разделителем . |
22 | size_t strxfrm (char * dest, const char * src, size_t n)
Преобразует первые n символов строки src в текущую локаль и помещает их в строку dest . |
Ищет первое вхождение символа c (символ без знака) в первых n байтах строки, на которую указывает аргумент str .
Сравнивает первые n байтов str1 и str2 .
Копирует n символов из src в dest .
Еще одна функция для копирования n символов из str2 в str1 .
Копирует символ c (символ без знака) в первые n символов строки, на которую указывает аргумент str .
Добавляет строку, на которую указывает src, в конец строки, на которую указывает dest .
Добавляет строку, на которую указывает src, в конец строки, на которую указывает dest, длиной до n символов.
Ищет первое вхождение символа c (символ без знака) в строке, на которую указывает аргумент str .
Сравнивает строку, на которую указывает str1, со строкой, на которую указывает str2 .
Сравнивает не более первых n байтов str1 и str2 .
Сравнивает строку str1 с str2 . Результат зависит от настройки местоположения LC_COLLATE.
Копирует указанную строку с помощью src в dest .
Копирует до n символов из строки, на которую указывает src в dest .
Вычисляет длину начального сегмента str1, который полностью состоит из символов, не входящих в str2.
Ищет во внутреннем массиве номер ошибки errnum и возвращает указатель на строку сообщения об ошибке.
Вычисляет длину строки str до, но не включая завершающий нулевой символ.
Находит первый символ в строке str1, который соответствует любому символу, указанному в str2 .
Ищет последнее вхождение символа c (символ без знака) в строке, на которую указывает аргумент str .
Вычисляет длину начального сегмента str1, который полностью состоит из символов в str2 .
Находит первое вхождение всей строковой стрелки (не включая завершающий нулевой символ), которая появляется в стоге сена .
Разбивает строку str на серию токенов, разделенных разделителем .
Преобразует первые n символов строки src в текущую локаль и помещает их в строку dest .
Библиотека C – <time.h>
Заголовок time.h определяет четыре типа переменных, два макроса и различные функции для манипулирования датой и временем.
Переменные библиотеки
Ниже приведены типы переменных, определенные в заголовке time.h –
Sr.No. | Переменная и описание |
---|---|
1 |
size_t Это целочисленный тип без знака и результат ключевого слова sizeof . |
2 |
clock_t Этот тип подходит для хранения процессорного времени. |
3 |
time_t is Этот тип подходит для хранения календарного времени. |
4 |
структура тм Эта структура используется для хранения времени и даты. |
size_t
Это целочисленный тип без знака и результат ключевого слова sizeof .
clock_t
Этот тип подходит для хранения процессорного времени.
time_t is
Этот тип подходит для хранения календарного времени.
структура тм
Эта структура используется для хранения времени и даты.
Структура ТМ имеет следующее определение –
struct tm { int tm_sec; /* seconds, range 0 to 59 */ int tm_min; /* minutes, range 0 to 59 */ int tm_hour; /* hours, range 0 to 23 */ int tm_mday; /* day of the month, range 1 to 31 */ int tm_mon; /* month, range 0 to 11 */ int tm_year; /* The number of years since 1900 */ int tm_wday; /* day of the week, range 0 to 6 */ int tm_yday; /* day in the year, range 0 to 365 */ int tm_isdst; /* daylight saving time */ };
Макросы библиотеки
Ниже приведены макросы, определенные в заголовке time.h –
Sr.No. | Макрос и описание |
---|---|
1 |
НОЛЬ Этот макрос является значением константы нулевого указателя. |
2 |
CLOCKS_PER_SEC Этот макрос представляет количество тактовых частот процессора в секунду. |
НОЛЬ
Этот макрос является значением константы нулевого указателя.
CLOCKS_PER_SEC
Этот макрос представляет количество тактовых частот процессора в секунду.
Функции библиотеки
Ниже приведены функции, определенные в заголовке time.h –
Возвращает указатель на строку, которая представляет день и время структуры timeptr.
Возвращает время процессора, использованное с начала эпохи, определенной реализацией (обычно начало программы).
Возвращает строку, представляющую локальное время на основе аргумента timer.
Возвращает разницу секунд между временем1 и временем2 (время1-время2).
Значение таймера разбивается на структуру tm и выражается в Всемирном координированном времени (UTC), также известном как среднее время по Гринвичу (GMT).
Значение таймера разбивается на структуру tm и выражается в местном часовом поясе.
Преобразует структуру, на которую указывает timeptr, в значение time_t в соответствии с местным часовым поясом.
Форматирует время, представленное в структуре timeptr, в соответствии с правилами форматирования, определенными в формате и сохраненными в str.
Вычисляет текущее время календаря и кодирует его в формате time_t.
complex::complex(const double& r, const double& im): _real(r), _imaginary(im){}
complex::complex(const complex& c): _real(c._real), _imaginary(c._imaginary){}
void complex::operator +=(const complex& c){
_imaginary += c._imaginary;
void complex::operator -=(const complex& c){
_imaginary -= c._imaginary;
void complex::operator *=(const complex& c){
tmp._real = _real*c._real — _imaginary*c._imaginary;
tmp._imaginary = _real*c._imaginary + _imaginary*c._real;
void complex::operator /=(const complex& c){
tmp = (*this) * c.conjugate();
_real = tmp._real / c.module();
_imaginary = tmp._imaginary / c.module();
complex& complex::operator =(const complex& c){
_imaginary = c._imaginary;
complex& complex::operator =(const double& d){
const double& complex::real() const { return _real; }
const double& complex::imaginary() const { return _imaginary; }
void complex::swap(complex& c){
c._imaginary = _imaginary;
_imaginary = tmp._imaginary;
std::string complex::toString() const{
std::ostringstream strcout;
strcout << _real << » + i*( « << _imaginary << » )»;
double complex::module() const{
return _real*_real + _imaginary*_imaginary;
complex complex::conjugate() const{
return complex(_real, —_imaginary);
// extern class interface
complex operator + (const complex& c1, const complex& c2){
complex operator — (const complex& c1, const complex& c2){
complex operator * (const complex& c1, const complex& c2){
complex operator / (const complex& c1, const complex& c2){
std::ostream& operator << (std::ostream& os, const complex& c){
bool operator == (const complex& c1, const complex& c2){
return ((c1.real() == c2.real()) && (c1.imaginary() == c2.imaginary()));
complex pow(const complex&, const complex&){
double abs(const complex& c){