Sdílet prostřednictvím


<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;

Vrácená 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.

Vrácená 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_SUCCESSje 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++