stdlib.h

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Стандартная библиотека
языка программирования С

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] </ref> Нет Да

NULL[править | править вики-текст]

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

Варианты[править | править вики-текст]

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

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

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

Типы[править | править вики-текст]

size_t[править | править вики-текст]

Заголовочные файлы 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[править | править вики-текст]

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

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. 1 2 C++ Resources Network — stdlib.h проверено 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

Ссылки[править | править вики-текст]