<cstdlib>
Zahrne hlavičku <stdlib.h>
standardní knihovny C a přidá přidružené názvy do std
oboru názvů. Zahrnutím této hlavičky zajistíte, že názvy deklarované pomocí externího propojení v hlavičce standardní knihovny jazyka C jsou deklarovány v std
oboru názvů.
Poznámka:
<stdlib.h>
neobsahuje typ wchar_t
.
Požadavky
Hlavička: <cstdlib>
Obor názvů: std
Obor názvů a makra
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
Pouze funkce expozice
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*);
Funkce spuštění a ukončení
Function | Popis |
---|---|
_Exit |
Ukončí program bez použití destruktorů nebo registrovaných funkcí. |
abort |
Ukončí program bez použití destruktorů. |
atexit |
Zaregistruje funkci pro ukončení programu. |
exit |
Zničí objekty pomocí vlákna a statického úložiště a vrátí řízení. |
at_quick_exit |
Zaregistruje funkci bez argumentů pro ukončení programu. |
quick_exit |
Zaregistruje funkci se zachovanými objekty pro ukončení programu. |
getenv |
Viz referenční informace ke standardní knihovně jazyka C. |
system |
Viz referenční informace ke standardní knihovně jazyka C. |
_Exit
[[noreturn]] void _Exit(int status) noexcept;
Poznámky
Program se ukončí bez provádění destruktorů pro objekty automatické doby trvání úložiště, vlákna nebo statického úložiště a bez volání funkcí předaných atexit()
. Funkce _Exit
je bezpečná pro signál.
abort
[[noreturn]] void abort() noexcept;
Poznámky
Program se ukončí bez provádění destruktorů pro objekty automatické doby trvání úložiště, vlákna nebo statického úložiště a bez volání funkcí předaných atexit()
. Funkce abort
je bezpečná pro signál.
at_quick_exit
int at_quick_exit(c-atexit-handler * func) noexcept;
int at_quick_exit(atexit-handler * func) noexcept;
Návratová hodnota
Nulu, pokud registrace proběhne úspěšně, pokud selže, není-li nulová.
Poznámky
Funkce at_quick_exit()
registrují funkci func
, která je volána bez argumentů, pokud quick_exit()
je volána. Volání at_quick_exit()
, ke kterému nedojde dříve, než se všechna volání quick_exit()
nemusí podařit úspěšně provést. Funkce at_quick_exit()
nezavádějí rasu dat. Pořadí registrace může být neurčité, pokud at_quick_exit()
bylo volána z více než jednoho vlákna. Vzhledem k tomu, že at_quick_exit()
se registrace liší od atexit()
registrací, aplikace možná budou muset volat obě registrační funkce pomocí stejného argumentu. MSVC podporuje registraci alespoň 32 funkcí.
atexit
int atexit(c-atexit-handler * func) noexcept;
int atexit(atexit-handler * func) noexcept;
Poznámky
Funkce atexit()
registrují funkci, na kterou func
odkazuje, aby byla volána bez argumentů při normálním ukončení programu. Volání atexit()
, ke kterému nedojde dříve, než se volání exit()
nemusí podařit. Funkce atexit()
nezavádějí rasu dat.
Návratová hodnota
Vrátí nulu, pokud registrace proběhne úspěšně, nenulová, pokud selže.
exit
[[noreturn]] void exit(int status);
Poznámky
Nejprve se zničí objekty s dobou trvání úložiště vláken a přidružené k aktuálnímu vláknu.
Dále se volají objekty se statickou dobou trvání úložiště a funkce zaregistrované voláním atexit()
. Automatické objekty se při zavolání nezničí exit()
. Pokud ovládací prvek opustí registrovanou funkci volanou exit()
, protože funkce neposkytuje obslužnou rutinu pro vyvolánou výjimku, std::terminate()
je volána. Funkce se volá jednou pro každou registraci. Objekty s automatickou dobou trvání úložiště jsou všechny zničeny v programu, jehož main
funkce neobsahuje žádné automatické objekty a provádí volání exit()
. Řízení lze přenést přímo do takové main
funkce vyvoláním výjimky zachycené v main
.
Dále se vyprázdní všechny otevřené streamy jazyka C (jak jsou zprostředkovány podpisy funkcí deklarované v ) s nezapsaných dat uložených ve <cstdio>
vyrovnávací paměti, všechny otevřené datové proudy jazyka C se zavřou a všechny soubory vytvořené voláním tmpfile()
se odeberou.
Nakonec se ovládací prvek vrátí do hostitelského prostředí. Pokud status
je nula nebo EXIT_SUCCESS
je vrácena implementace definovaná forma úspěšného ukončení stavu. MSVC vrátí hodnotu nuly. Pokud status
ano EXIT_FAILURE
, vrátí MSVC hodnotu 3. V opačném případě vrátí msVC hodnotu parametru status
.
getenv
char* getenv(const char* name);
quick_exit
[[noreturn]] void quick_exit(int status) noexcept;
Poznámky
Obecně platí, že funkce zaregistrované voláním at_quick_exit()
se volají v obráceném pořadí registrace. Toto pořadí se nevztahuje na funkce zaregistrované po zavolání jiných registrovaných funkcí. Při zavolání se nezničí quick_exit()
žádné objekty. Pokud ovládací prvek opustí registrovanou funkci volanou quick_exit()
, protože funkce neposkytuje obslužnou rutinu pro vyvolánou výjimku, std::terminate()
je volána. Funkce registrovaná prostřednictvím at_quick_exit()
je vyvolána vláknem, které volá quick_exit()
, což může být jiné vlákno než vlákno, které ho zaregistrovalo. To znamená, že registrované funkce by se neměly spoléhat na identitu objektů, které mají dobu trvání úložiště vláken. Po volání registrovaných funkcí quick_exit()
volání _Exit(status)
. Standardní vyrovnávací paměti souborů nejsou vyprázdněny. Funkce quick_exit()
je v bezpečí, když jsou funkce zaregistrované at_quick_exit()
.
system
int system(const char* string);
Funkce přidělování paměti
// 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);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C. MSVC funkci nepodporuje aligned_alloc
. C11 specifikovaný aligned_alloc()
způsobem, který není kompatibilní s implementací free()
společnosti Microsoft , a to musí free()
být schopen zpracovat vysoce sladěné přidělení.
Převody číselných řetězců
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);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C.
Vícebajtové / široké funkce převodu řetězců a znaků
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);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C.
Funkce algoritmů
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);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C.
Funkce generování náhodných čísel nízké kvality
int rand();
void srand(unsigned int seed);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C.
Absolutní hodnoty
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);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C.
Celočíselné dělení
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);
Poznámky
Tyto funkce mají sémantiku zadanou ve standardní knihovně jazyka C.
Viz také
Referenční informace k souborům hlaviček
Standardní knihovna C++ – přehled
Bezpečný přístup z více vláken ve standardní knihovně C++