<cstdlib>
C 標準ライブラリ ヘッダー <stdlib.h>
がインクルードされ、関連する名前が std
名前空間に追加されます。 このヘッダーをインクルードすると、C 標準ライブラリ ヘッダーの外部リンケージで宣言された名前が、std
名前空間でも宣言されます。
Note
<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;
戻り値
登録が成功した場合は 0、失敗した場合は 0 以外。
解説
関数 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()
はデータの競争を導入しません。
戻り値
登録が成功した場合は 0 を返し、失敗した場合は 0 以外を返します。
exit
[[noreturn]] void exit(int status);
解説
最初に、スレッド ストレージ期間が指定され、現在のスレッドに関連付けられているオブジェクトが破棄されます。
次に、静的ストレージ期間を持つオブジェクトが破棄され、atexit()
を呼び出して登録された関数が呼び出されます。 exit()
が呼び出されると、自動オブジェクトは破棄されません。 関数はスローされた例外のハンドラーを提供しないため、exit()
によって呼び出された登録済み関数がコントロールから離れる場合、std::terminate()
が呼び出されます。 関数は、登録されるごとに 1 回呼び出されます。 自動ストレージ期間を持つオブジェクトはすべて、main
関数に自動オブジェクトが含まれないプログラムで破棄され、exit()
への呼び出しが実行されます。 main
でキャッチされた例外をスローすることで、このような main
関数に制御を直接転送できます。
次に、書き込まれていないバッファー データを持つ (<cstdio>
で宣言された関数シグネチャによってメディアされる) 開いているすべての C ストリームがフラッシュされ、開いているすべての C ストリームが閉じ、tmpfile()
を呼び出すことによって作成されたファイルがすべて削除されます。
最後に、コントロールがホスト環境に返されます。 status
が 0 または EXIT_SUCCESS
の場合、状態の正常終了の実装定義形式が返されます。 MSVC は 0 の値を返します。 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()
を呼び出すスレッドによって呼び出されます。これは、登録したスレッドとは異なるスレッドである可能性があります。 つまり、登録済み関数は、スレッド ストレージ期間を持つオブジェクトの ID に依存してはならないことを意味します。 登録済み関数を呼び出した後、quick_exit()
は _Exit(status)
を呼び出します。 標準ファイル バッファーはフラッシュされません。 関数が at_quick_exit()
に登録されている場合、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 は aligned_alloc()
を、Microsoft の free()
の実装と互換性のない方法で指定します。つまり、その 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 標準ライブラリで指定されたセマンティクスがあります。