<cstdlib>
包含 C Standard 程式庫標頭 <stdlib.h>
,並將相關聯的名稱新增至 std
命名空間。 包含此標頭可確保在命名空間中 std
宣告使用外部連結宣告的名稱。
注意
<stdlib.h>
不包含 類型 wchar_t
。
需求
標頭 : <cstdlib>
命名空間:std
命名空間和宏
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 標準程式庫中指定的語意。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應