<cstdlib>
包含 C Standard 連結庫標頭 <stdlib.h>
,並將相關聯的名稱新增至 std
命名空間。 包含此標頭可確保在命名空間中 std
宣告使用外部連結宣告的名稱。
注意
<stdlib.h>
不含類型 wchar_t
。
需求
標頭: <cstdlib>
命名空間:std
Namespace和宏
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
僅說明函式
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*);
開始和終止函式
函式 | 描述 |
---|---|
_Exit |
在不使用解構函式或已註冊函式的情況下終止程式。 |
abort |
在不使用解構函式的情況下終止程式。 |
atexit |
註冊程序終止的函式。 |
exit |
使用線程和靜態記憶體終結對象,然後傳回控件。 |
at_quick_exit |
在沒有程序終止自變數的情況下註冊函式。 |
quick_exit |
向程序終止保留的物件註冊函式。 |
getenv |
請參閱 C 標準連結庫參考。 |
system |
請參閱 C 標準連結庫參考。 |
_Exit
[[noreturn]] void _Exit(int status) noexcept;
備註
程式會終止,而不會針對自動、線程或靜態儲存期間的對象執行解構函式,而且不會呼叫傳遞至 atexit()
的函式。 函式 _Exit
是安全訊號。
abort
[[noreturn]] void abort() noexcept;
備註
程式會終止,而不會針對自動、線程或靜態儲存期間的對象執行解構函式,而且不會呼叫傳遞至 atexit()
的函式。 函式 abort
是安全訊號。
at_quick_exit
int at_quick_exit(c-atexit-handler * func) noexcept;
int at_quick_exit(atexit-handler * func) noexcept;
傳回值
如果註冊成功,則為零;如果註冊失敗,則為非零。
備註
函式 at_quick_exit()
會註冊函 func
式,在呼叫 時 quick_exit()
不會呼叫自變數。 呼叫 at_quick_exit()
之前,所有呼叫 quick_exit()
都可能不會成功。 函式 at_quick_exit()
不會導入數據競爭。 如果 at_quick_exit()
從多個線程呼叫,則註冊順序可能不確定。 由於 at_quick_exit()
註冊與註冊不同 atexit()
,因此應用程式可能需要使用相同的自變數呼叫這兩個註冊函式。 MSVC 支援至少 32 個函式的註冊。
atexit
int atexit(c-atexit-handler * func) noexcept;
int atexit(atexit-handler * func) noexcept;
備註
函式 atexit()
會登錄 所 func
指向的函式,以在正常程序終止時呼叫,而不需要自變數。 對的呼叫 atexit()
不會在呼叫 exit()
之前發生,可能無法成功。 函式 atexit()
不會導入數據競爭。
傳回值
如果註冊成功,則傳回零,如果註冊失敗,則傳回非零。
exit
[[noreturn]] void exit(int status);
備註
首先,具有線程儲存持續時間且與目前線程相關聯的物件會終結。
接下來,會終結具有靜態儲存期間的物件,並呼叫 呼叫 atexit()
來註冊函式。 呼叫 時 exit()
,不會終結自動物件。 如果 控制項離開 所 exit()
呼叫的已註冊函式,因為函式未提供擲回例外狀況的處理程式, std::terminate()
則會呼叫 。 每次註冊函式時都會呼叫一次。 具有自動儲存持續時間的物件全都會終結於不含自動物件的程式中 main
,並執行 對 exit()
的呼叫。 您可以擲回攔截到 的main
例外狀況,直接將控件傳送至這類main
函式。
接下來,所有開啟的 C 數據流(如 中 <cstdio>
宣告的函式簽章所調解)都會排清未寫入的緩衝數據,所有開啟的 C 數據流都會關閉,而且會移除呼叫 tmpfile()
所建立的所有檔案。
最後,控制權會傳回至主機環境。 當 為零或 EXIT_SUCCESS
時status
,會傳回狀態成功終止的實作定義形式。 MSVC 會傳回零的值。 如果 status
為 EXIT_FAILURE
,MSVC 會傳回 3 的值。 否則,MSVC 會傳 status
回參數值。
getenv
char* getenv(const char* name);
quick_exit
[[noreturn]] void quick_exit(int status) noexcept;
備註
一般而言,呼叫 at_quick_exit()
所註冊的函式會以其註冊的反向順序呼叫。 此順序不適用於呼叫其他已註冊函式之後所註冊的函式。 呼叫 時 quick_exit()
,不會終結任何物件。 如果 控制項離開 所 quick_exit()
呼叫的已註冊函式,因為函式未提供擲回例外狀況的處理程式, std::terminate()
則會呼叫 。 透過 註冊的 at_quick_exit()
函式是由呼叫 quick_exit()
的線程叫用,這可以是與註冊它不同的線程。 這表示已註冊的函式不應依賴具有線程儲存期間之物件的身分識別。 呼叫已註冊的函式之後,會 quick_exit()
呼叫 _Exit(status)
。 標準檔案緩衝區不會排清。 quick_exit()
當向 註冊的at_quick_exit()
函式為 時,函式是訊號安全。
system
int system(const char* string);
記憶體配置函式
// 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);
備註
這些函式具有 C 標準連結庫中指定的語意。 MSVC 不支援 函式 aligned_alloc
。 C11 以與 Microsoft 實free()
作不相容的方式指定aligned_alloc()
,free()
也就是必須能夠處理高度對齊的配置。
數值字串轉換
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);
備註
這些函式具有 C 標準連結庫中指定的語意。
多位元組/寬字串和字元轉換函式
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);
備註
這些函式具有 C 標準連結庫中指定的語意。
演算法函式
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);
備註
這些函式具有 C 標準連結庫中指定的語意。
低品質隨機數產生函式
int rand();
void srand(unsigned int seed);
備註
這些函式具有 C 標準連結庫中指定的語意。
絕對值
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);
備註
這些函式具有 C 標準連結庫中指定的語意。
整數除數
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);
備註
這些函式具有 C 標準連結庫中指定的語意。