【C++Builder】C ランタイムライブラリリファレンス (stdlib.h)

# 一般ユーティリティ (Standard Library)

| ヘッダ<br>ファイル | [stdlib.h](https://docwiki.embarcadero.com/RADStudio/ja/Stdlib.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | ANSI C (C89) / C90 |
| 概要 | 5 つの型及び幾つかの一般ユーティリティ関数を宣言し、幾つかのマクロを定義する。 |

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| div_t | 2 つの整数からなる構造体。[div()](https://docwiki.embarcadero.com/RADStudio/ja/Div%EF%BC%88C%2B%2B%EF%BC%89) が返す。 |
| ldiv_t | 2 つの整数からなる構造体。ldiv() が返す。 |
| lldiv_t | 2 つの整数からなる構造体。lldiv() が返す。 |
| (size_t) | [sizeof()](https://docwiki.embarcadero.com/RADStudio/ja/Sizeof) が返す符号なし整数型。 |
| (wchar_t) | ワイド文字を表現できる型。 |


## マクロ

### exit() 関数を呼び出すときの終了条件

| 名前 | 機能 |
|:---|:---|
| [EXIT_FAILURE](https://docwiki.embarcadero.com/RADStudio/ja/EXIT_xxxx_define) | プログラムを正常終了します。 |
| [EXIT_SUCCESS](https://docwiki.embarcadero.com/RADStudio/ja/EXIT_xxxx_define) | プログラムを異常終了します。 |

### 最大値

最大値の多くは [limits.h](https://qiita.com/ht_deko/items/1a8b281c95f52df0da09) にて定義されています。 

| 名前 | 機能 |
|:---|:---|
| MB_CUR_MAX | 現在のロケールでのマルチバイト数の最大バイト数。<br>MB_LEN_MAX ([limits.h](https://qiita.com/ht_deko/items/1a8b281c95f52df0da09) にて定義) を超えることはありません。|
| [RAND_MAX](https://docwiki.embarcadero.com/RADStudio/ja/RAND_MAX_define) | [rand()](https://docwiki.embarcadero.com/RADStudio/ja/Rand) 関数から返される最大値です。 |

### その他

| 名前 | 機能 |
|:---|:---|
| [(NULL)](https://docwiki.embarcadero.com/RADStudio/ja/NULL_define)        | 任意のデータオブジェクトポインタと互換性があるヌルポインタ定数です。 |

## 引数付きマクロ

## 関数
                    
### 疑似乱数

| 名前 | 機能 |
|:---|:---|
| [rand()](https://docwiki.embarcadero.com/RADStudio/ja/Rand)     | 乱数ジェネレータです。 |
| [srand()](https://docwiki.embarcadero.com/RADStudio/ja/Srand)    | 乱数ジェネレータを初期化します。 |


### メモリ管理

| 名前 | 機能 |
|:---|:---|
| [calloc()](https://docwiki.embarcadero.com/RADStudio/ja/Calloc)   | メインメモリを割り当てます。 |
| [free()](https://docwiki.embarcadero.com/RADStudio/ja/Free)     | 割り当てられたブロックを解放します。 |
| [malloc()](https://docwiki.embarcadero.com/RADStudio/ja/Malloc)   | malloc は、メモリヒープから size バイトのブロックを割り当てます。 |
| [realloc()](https://docwiki.embarcadero.com/RADStudio/ja/Realloc)  | メインメモリを再割り当てします。 |

:::note
メモリ操作関連の関数は処理系によっては `alloc.h` で定義されていたりしました。
:::

### プロセス制御

| 名前 | 機能 |
|:---|:---|
| _Exit() [^1]   | プログラムの終了。終了処理を行いません。<br>古い処理系では [_exit()](https://docwiki.embarcadero.com/RADStudio/ja/US_exit) で定義されている事があります。 |
| [abort()](https://docwiki.embarcadero.com/RADStudio/ja/Abort)    | プログラムを異常終了させます。 |
| [atexit()](https://docwiki.embarcadero.com/RADStudio/ja/Atexit)   | 終了関数を登録します。 |
| [exit()](https://docwiki.embarcadero.com/RADStudio/ja/Exit)     | プログラムの終了。終了処理を行います。 |
| [system()](https://docwiki.embarcadero.com/RADStudio/ja/System%E3%80%81wsystem)   | オペレーティング システム コマンドを実行します。 |

### 環境変数

| 名前 | 機能 |
|:---|:---|
| [getenv()](https://docwiki.embarcadero.com/RADStudio/ja/Getenv%E3%80%81wgetenv)   | システム環境から環境変数を取得します。 |

### 検索・ソート

| 名前 | 機能 |
|:---|:---|
| [bsearch()](https://docwiki.embarcadero.com/RADStudio/ja/Bsearch)  | 配列のバイナリ検索を実行します。 |
| [qsort()](https://docwiki.embarcadero.com/RADStudio/ja/Qsort)    | クイックソートアルゴリズムを使ってソートします。 |

### 整数算術演算

| int | long | long long | 機能 |
|:---|:---|:---|:---|
| [abs()](https://docwiki.embarcadero.com/RADStudio/ja/Abs)      | [labs()](https://docwiki.embarcadero.com/RADStudio/ja/Labs)     | llabs() [^1]   | 整数の絶対値を返します。 |
| [div()](https://docwiki.embarcadero.com/RADStudio/ja/Div%EF%BC%88C%2B%2B%EF%BC%89)      | [ldiv()](https://docwiki.embarcadero.com/RADStudio/ja/Ldiv)     | lldiv() [^1]   | 2 つの整数で除算を行い、その商と剰余を返します。 |

### 文字列から数値へ変換

| int | long | long long | 機能 |
|:---|:---|:---|:---|
| [atoi()](https://docwiki.embarcadero.com/RADStudio/ja/Atoi%EF%BC%8C_wtoi)     | [atol()](https://docwiki.embarcadero.com/RADStudio/ja/Atol%EF%BC%8C_wtol)     | [atoll()](https://docwiki.embarcadero.com/RADStudio/ja/atoll) [^1]  | 文字列を整数に変換します。<br>要確認: strto～() 系で代替。|

| 名前 | 機能 |
|:---|:---|
| [atof()](https://docwiki.embarcadero.com/RADStudio/ja/Atof%EF%BC%8C_wtof)     | 文字列を実数 (double 型) に変換します。<br>要確認: strto～() 系で代替。 |

:::note
ato～() 系の関数は古い処理系との互換性のために残されています。
:::

| long | unsigned<br>long | long long | unsigned<br>long long | 機能 |
|:---|:---|:---|:---|:---|
| [strtol()](https://docwiki.embarcadero.com/RADStudio/ja/Strtol%EF%BC%8Cwcstol)   | [strtoul()](https://docwiki.embarcadero.com/RADStudio/ja/Strtoul%EF%BC%8Cwcstoul)  | strtoll() [^1] | strtoull() [^1] | 文字列を指定された基数で<br>整数型の値に変換します。|

| double | float | long double | 機能 |
|:---|:---|:---|:---|
| [strtod()](https://docwiki.embarcadero.com/RADStudio/ja/Strtod%EF%BC%8C_strtold%EF%BC%8Cwcstod%EF%BC%8C_wcstold)   | strtof() [^1]  | [strtold()](https://docwiki.embarcadero.com/RADStudio/ja/Strtod%EF%BC%8C_strtold%EF%BC%8Cwcstod%EF%BC%8C_wcstold) [^1] | 文字列を実数型の値に変換します。 |

### マルチバイト文字・ワイド文字操作

| 名前 | 機能 |
|:---|:---|
| [mblen()](https://docwiki.embarcadero.com/RADStudio/ja/Mblen)    | マルチバイト文字の長さを判定します。 |
| [mbstowcs()](https://docwiki.embarcadero.com/RADStudio/ja/Mbstowcs) | マルチバイト文字列を wchar_t 配列に変換します。 |
| [mbtowc()](https://docwiki.embarcadero.com/RADStudio/ja/Mbtowc)   | マルチバイト文字を wchar_t コードに変換します。 |
| [wcstombs()](https://docwiki.embarcadero.com/RADStudio/ja/Wcstombs) | wchar_t 配列をマルチバイト文字列に変換します。 |
| [wctomb()](https://docwiki.embarcadero.com/RADStudio/ja/Wctomb)   | wchar_t コードをマルチバイト文字に変換します。 |

:::note
ワイド文字用の関数が [wchar.h](https://qiita.com/ht_deko/items/5eaf661c0b3452845672) で定義されています。
:::

## 資料

 - [C 言語 / 標準ライブラリ / stdlib.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/stdlib.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス stdlib.h &#x2014; 標準ライブラリー関数 (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-stdlibh-standard-library-functions)
 - [C 言語の標準ヘッダ一覧 stdlib.h (C 言語)](http://www.c-lang.org/detail/stdlib_h.html)
 
---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)


[^1]: C99 で追加された。