<cstdlib>

Includes the C Standard library header <stdlib.h> and adds the associated names to the std namespace. Including this header ensures that the names declared using external linkage in the C standard library header are declared in the std namespace.

Note

<stdlib.h> doesn't include the type wchar_t.

Requirements

Header: <cstdlib>

Namespace: std

Namespace and Macros

namespace std {
    using size_t = see definition;
    using div_t = see definition;
    using ldiv_t = see definition;
    using lldiv_t = see definition;
}

#define NULL
#define EXIT_FAILURE
#define EXIT_SUCCESS
#define RAND_MAX
#define MB_CUR_MAX

Exposition only functions

extern "C" using c-atexit-handler = void();
extern "C++" using atexit-handler = void();
extern "C" using c-compare-pred = int(const void*, const void*);
extern "C++" using compare-pred = int(const void*, const void*);

Start and termination functions

Function Description
_Exit Terminates program without using destructors or registered functions.
abort Terminates program without using destructors.
atexit Registers function for program termination.
exit Destroys objects with thread and static storage, then returns control.
at_quick_exit Registers function without arguments for program termination.
quick_exit Registers function with preserved objects for program termination.
getenv See C standard library reference.
system See C standard library reference.

_Exit

[[noreturn]] void _Exit(int status) noexcept;

Remarks

The program is terminated without executing destructors for objects of automatic, thread, or static storage duration and without calling functions passed to atexit(). The function _Exit is signal-safe.

abort

[[noreturn]] void abort() noexcept;

Remarks

The program is terminated without executing destructors for objects of automatic, thread, or static storage duration and without calling functions passed to atexit(). The function abort is signal-safe.

at_quick_exit

int at_quick_exit(c-atexit-handler * func) noexcept;
int at_quick_exit(atexit-handler * func) noexcept;

Return Value

Zero if the registration succeeds, non-zero if it fails.

Remarks

The at_quick_exit() functions register a function func, which is called without arguments when quick_exit() is called. A call to at_quick_exit() that doesn't happen before all calls to quick_exit() may not succeed. The at_quick_exit() functions don't introduce a data race. The order of registration may be indeterminate if at_quick_exit() was called from more than one thread. Since at_quick_exit() registrations are distinct from the atexit() registrations, applications may need to call both registration functions using the same argument. MSVC supports the registration of at least 32 functions.

atexit

int atexit(c-atexit-handler * func) noexcept;
int atexit(atexit-handler * func) noexcept;

Remarks

The atexit() functions register the function pointed to by func to be called without arguments at normal program termination. A call to atexit() that doesn't happen before a call to exit() may not succeed. The atexit() functions don't introduce a data race.

Return Value

Returns zero if the registration succeeds, nonzero if it fails.

exit

[[noreturn]] void exit(int status);

Remarks

First, objects with thread storage duration and associated with the current thread are destroyed.

Next, objects with static storage duration are destroyed and functions registered by calling atexit() are called. Automatic objects aren't destroyed when exit() is called. If control leaves a registered function called by exit() because the function doesn't provide a handler for a thrown exception, std::terminate() is called. A function is called once for every time it's registered. Objects with automatic storage duration are all destroyed in a program whose main function contains no automatic objects and executes the call to exit(). Control can be transferred directly to such a main function by throwing an exception that's caught in main.

Next, all open C streams (as mediated by the function signatures declared in <cstdio>) with unwritten buffered data are flushed, all open C streams are closed, and all files created by calling tmpfile() are removed.

Finally, control is returned to the host environment. When status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned. MSVC returns a value of zero. If status is EXIT_FAILURE, MSVC returns a value of 3. Otherwise, MSVC returns the status parameter value.

getenv

char* getenv(const char* name);

quick_exit

[[noreturn]] void quick_exit(int status) noexcept;

Remarks

Generally, functions registered by calls to at_quick_exit() are called in the reverse order of their registration. This order doesn't apply to functions registered after other registered functions have already been called. No objects are destroyed when quick_exit() is called. If control leaves a registered function called by quick_exit() because the function doesn't provide a handler for a thrown exception, std::terminate() is called. A function registered via at_quick_exit() is invoked by the thread that calls quick_exit(), which can be a different thread than the one that registered it. That means registered functions shouldn't rely on the identity of objects that have thread storage duration. After calling registered functions, quick_exit() calls _Exit(status). The standard file buffers aren't flushed. The function quick_exit() is signal-safe when the functions registered with at_quick_exit() are.

system

int system(const char* string);

Memory allocation functions

// void* aligned_alloc(size_t alignment, size_t size); // Unsupported in MSVC
void* calloc(size_t nmemb, size_t size);
void free(void* ptr);
void* malloc(size_t size);
void* realloc(void* ptr, size_t size);

Remarks

These functions have the semantics specified in the C standard library. MSVC doesn't support the aligned_alloc function. C11 specified aligned_alloc() in a way that's incompatible with the Microsoft implementation of free(), namely, that free() must be able to handle highly aligned allocations.

Numeric string conversions

double atof(const char* nptr);
int atoi(const char* nptr);
long int atol(const char* nptr);
long long int atoll(const char* nptr);
double strtod(const char* nptr, char** endptr);
float strtof(const char* nptr, char** endptr);
long double strtold(const char* nptr, char** endptr);
long int strtol(const char* nptr, char** endptr, int base);
long long int strtoll(const char* nptr, char** endptr, int base);
unsigned long int strtoul(const char* nptr, char** endptr, int base);
unsigned long long int strtoull(const char* nptr, char** endptr, int base);

Remarks

These functions have the semantics specified in the C standard library.

Multibyte / wide string and character conversion functions

int mblen(const char* s, size_t n);
int mbtowc(wchar_t* pwc, const char* s, size_t n);
int wctomb(char* s, wchar_t wchar);
size_t mbstowcs(wchar_t* pwcs, const char* s, size_t n);
size_t wcstombs(char* s, const wchar_t* pwcs, size_t n);

Remarks

These functions have the semantics specified in the C standard library.

Algorithm functions

void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, c-compare-pred * compar);
void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, compare-pred * compar);
void qsort(void* base, size_t nmemb, size_t size, c-compare-pred * compar);
void qsort(void* base, size_t nmemb, size_t size, compare-pred * compar);

Remarks

These functions have the semantics specified in the C standard library.

Low-quality random number generation functions

int rand();
void srand(unsigned int seed);

Remarks

These functions have the semantics specified in the C standard library.

Absolute values

int abs(int j);
long int abs(long int j);
long long int abs(long long int j);
float abs(float j);
double abs(double j);
long double abs(long double j);
long int labs(long int j);
long long int llabs(long long int j);

Remarks

These functions have the semantics specified in the C standard library.

Integer division

div_t div(int numer, int denom);
ldiv_t div(long int numer, long int denom);
lldiv_t div(long long int numer, long long int denom);
ldiv_t ldiv(long int numer, long int denom);
lldiv_t lldiv(long long int numer, long long int denom);

Remarks

These functions have the semantics specified in the C standard library.

See also

Header Files Reference
C++ Standard Library Overview
Thread Safety in the C++ Standard Library