stdlib.h — заголовочный файл стандартной библиотеки языка Си, который содержит в себе функции, занимающиеся выделением памяти, контролем процесса выполнения программы, преобразованием типов и другие. Заголовок вполне совместим с C++ и известен в нём как cstdlib. Название «stdlib» расшифровывается как «standard library» (стандартная библиотека).

Функции

править
Имя Описание Соответствие стандартам
Преобразование типов C89 C99
atof строка в число двойной точности (double; НЕ float) Да Да
atoi строка в целое число (integer) Да Да
atol строка в длинное целое число (long integer) Да Да
atoll строка в длинное целое число (long long integer) Нет Да
strtod строка в число двойной точности (double) Да Да
strtof строка в число одиночной точности (float) Нет Да
strtol строка в длинное целое число (long integer) Да Да
strtold строка в длинное двойной точности (long double) Нет Да
strtoll строка в длинное целое число (long long integer) Нет Да
strtoul строка в беззнаковое длинное целое число (unsigned long integer) Да Да
strtoull строка в беззнаковое длинное целое число (unsigned long long integer) Нет Да
Генерация псевдослучайных последовательностей
rand генерирует псевдослучайное значение Да Да
srand устанавливает начальное значение генератора псевдослучайных чисел Да Да
Выделение и освобождение памяти
malloc
calloc
realloc
выделяет память из кучи Да Да
free освобождает память обратно в кучу Да Да
Контроль процесса выполнения программы
abort некорректное завершение выполнения Да Да
atexit регистрирует обратный вызов функции, которую нужно будет выполнить перед завершением работы программы Да Да
exit завершает выполнение программы Да Да
getenv извлекает переменные окружения Да Да
system выполняет внешнюю команду Да Да
Сортировка и поиск
bsearch двоичный поиск в массиве Да Да
qsort сортировка массива Да Да
Математика
abs, labs абсолютная величина целого числа Да Да
llabs, imaxabs Нет Да
div
ldiv
деление целых чисел Да Да
Многобайтовые операции/ широкие символы
mblen размер многобайтовых символов[1] Нет Да
mbtowc, wctomb, mbstowcs, wcstombs преобразование многобайтовых и широких символов[1] Нет Да

Заголовочные файлы stdlib.h и stddef.h определяют макрос NULL, являющийся константным нуль-указателем, который гарантированно указывает на некорректный адрес памяти.

Варианты

править

NULL может быть определен как константное выражение, равное целому нулевому числу (нулю), длинному целому нулю, или нуль приводится к указателю типа void *:

#define NULL  0
#define NULL  0L
#define NULL  ((void *) 0)

Несмотря на то, что константа нуль-указателя всегда представляется в Си символьной константой 0 или 0, приведённым к void-указателю, реальное битовое представление подобного указателя зависит от системы и может содержать однобитовые значения.

Заголовочные файлы stdlib.h и stddef.h определяют тип данных, называемый size_t[2], который используется для представления размера объекта. Библиотечные функции, использующие размеры, принимают на вход значения именно этого типа. Значения типа size_t возвращает оператор sizeof.

Настоящий тип size_t платформо-независим; распространенной ошибкой является подразумевать под size_t беззнаковое целое (unsigned int), что может привести к ошибкам программирования,[3] причём в первую очередь это касается 64-битных архитектур.

div_t, ldiv_t

править

Также определены два менее широко используемых типа данных — div_t и ldiv_t. Они являются возвращаемыми типами функций div и ldiv. Стандарт определяет их следующим образом:

typedef struct {
    int quot, rem;
} div_t;
typedef struct {
    long int quot, rem;
} ldiv_t;

Нестандартные функции

править

itoa — общая функция, входящая во множество реализаций stdlib.h, но не определяемая стандартом. Возможно, её так часто включают в библиотеки благодаря её описанию в книге «Язык программирования Си». Аналогичного эффекта можно добиться при помощи функции sprintf, которая определена в стандарте.

См. также

править

Примечания

править
  1. 1 2 C++ Resources Network — stdlib.h Архивная копия от 7 января 2010 на Wayback Machine проверено 2009 12 15
  2. Согласно стандарту ISO/IEC 9899 C99, Глава 7.20 General utilities <stdlib.h> (point number 2) и Приложение B.19 General utilities <stdlib.h>. Определение может также содержаться в stddef.h, если кто-то захочет избежать подключения всей stdlib.
  3. 20 issues of porting C++ code on the 64-bit platform Архивировано 4 января 2010 года.

Ссылки

править