「C言語/標準ライブラリ/stdlib.h」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
DL化
タグ: 2017年版ソースエディター
542 行
=== abort関数 ===
<ref>『JISX3010:2003』p.227「7.20.4.1 abort関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
void abort(void);
</syntaxhighlight>
*; 引数
:なし
*; 返却値
:呼び出し元に復帰しない
*; 機能
:abort関数とは、異常プログラム終了を引き起こす関数である。
:ただし、シグナルSIGABRTが捕捉されていて、かつシグナル処理ルーチンが復帰しない場合を除く。
:以下の動作は処理系定義である。
:* 書き出されていないバッファリングされたデータを持つオープンしているストリームをフラッシュするかどうか
:* オープンしているストリームをクローズするかどうか
:* 一時ファイルを削除するかどうか
:
 
*例
:<syntaxhighlight lang=c>
#include <stdlib.h>
 
570 行
=== atexit関数 ===
<ref>『JISX3010:2003』p.227「7.20.4.2 atexit関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
int atexit(void (*func)(void));
</syntaxhighlight>
*; 引数
:func 関数
*; 返却値
:登録が成功したとき0、失敗したとき0以外の値。
*; 機能
:atexit関数とは、funcが指す関数を、プログラム正常終了時に実引数を持たずに呼び出される関数として登録する関数である。
:少なくとも32この関数の登録がサポートされる。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
601 行
=== exit関数 ===
<ref>『JISX3010:2003』p.227「7.20.4.3 exit関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
void exit(int status);
</syntaxhighlight>
*; 引数
:status 状態
*; 返却値
:呼び出し元に復帰できない。
*; 機能
:exit関数とは、正常プログラム終了を引き起こす関数である。
:プログラムが2回以上exit関数の呼び出しを行った場合、その動作は未定義である。
617 行
#書き出されていないバッファリングされたデータを持つすべてのオープンしているストリームをフラッシュし、全てのオープンしているストリームをクローズし、さらにtmpfile関数で生成したすべてのファイルを削除する。
#制御をホスト環境に戻す。statusの値が0又はEXIT_SUCCESSの場合、成功終了状態を処理系定義の形式で返す。statusの値がEXIT_FAILUREの場合、失敗終了状態を処理系定義の形式で返す。それ以外の場合、返される状態は処理系定義とする。
*;
:<syntaxhighlight lang=c>
#include <stdlib.h>
 
628 行
=== _Exit関数 ===
<ref>『JISX3010:2003』p.228「7.20.4.4 _Exit関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
void _Exit(int status);
</syntaxhighlight>
*; 引数
:status 状態
*; 返却値
:呼び出し元に復帰できない。
*; 機能
:_Exit関数とは、正常プログラム終了を引き起こし、制御をホスト環境に戻す。
:atexit関数で登録された関数及びsignal関数で登録されたシグナル処理ルーチンは呼び出さない。
:ホスト環境に返される状態は、exit関数と同じ方法で決定する。[[#exit関数]]を参照せよ。
:以下の動作は処理系定義である。
:*書き出されていないバッファリングされたデータを持つオープンしているストリームをフラッシュするかどうか
:*オープンしているストリームをクローズするかどうか
:*一時ファイルを削除するかどうか
:
 
*;
:<syntaxhighlight lang=c>
#include <stdlib.h>
 
657 行
=== getenv関数 ===
<ref>『JISX3010:2003』p.228「7.20.4.5 getenv関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
char *getenv(const char *name);
</syntaxhighlight>
*; 引数
:name 文字列
*; 返却値
:一致する並びの要素に結び付けられた文字列へのポインタ。指定されたnameが見つからないとき、空ポインタ。
*; 機能
:getenv関数とは、ホスト環境が提供する環境の並びの中で、nameが指す文字列と一致する文字列を探索する関数である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
683 行
=== system関数 ===
<ref>『JISX3010:2003』p.228「7.20.4.6 system関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
int system(const char *string);
</syntaxhighlight>
*; 引数
:string 空ポインタ、又はコマンド。
*; 返却値
:実引数が空ポインタの場合、コマンドプロセッサが使用可能である時に限り、0以外の値。
:実引数が空ポインタでなく、かつsystem関数から復帰するとき、処理系定義の値。
*; 機能
:stringが空ポインタのとき、system関数は、ホスト環境にコマンドプロセッサが存在するかどうか調べる。
:stringが空ポインタでないとき、system関数は、stringが指す文字列をコマンドプロセッサへ、その文字列を実行させるために渡す。
*;
:<syntaxhighlight lang=c>
#include <stdlib.h>
 
710 行
=== bsearch関数 ===
<ref>『JISX3010:2003』p.229「7.20.5.1 bsearch関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
</syntaxhighlight>
*; 引数
:key オブジェクト
:base 配列先頭の要素
721 行
:size 配列の要素のサイズ
:compar 比較関数
*; 返却値
:配列内の一致する要素へのポインタ。一致する要素がないとき、空ポインタ。等しい要素が二つある場合、いずれの要素と一致するかは未規定である。
*; 機能
:bsearch関数とは、先頭の要素をbaseが指す(要素数がnmemb個で各要素の大きさがsizeの)オブジェクトの配列内で、keyが指すオブジェクトに一致する要素を探索する関数である。
:comparが指す比較関数は、keyオブジェクトへのポインタを第一実引数とし、配列要素へのポインタを第二実引数として呼び出す。
:その関数は、以下の条件を満たす必要がある。
:*keyオブジェクトが配列要素より小さい場合、0より小さい整数を返す
:*keyオブジェクトが配列要素と等しい場合、0と等しい整数を返す
:*keyオブジェクトが配列要素より大きい場合、0より大きい整数を返す
:配列は、keyオブジェクトと比較して、小さい要素だけの部分、等しい要素だけの部分及び大きい要素だけの部分から構成され、これら3つの部分が、この順序で存在しなければならない。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
756 行
=== qsort関数 ===
<ref>『JISX3010:2003』p.230「7.20.5.2 qsort関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdio.h>
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
</syntaxhighlight>
*; 引数
:base オブジェクト
:nmemb 配列の要素数
:size 配列の要素のサイズ
:comar 比較関数
*; 返却値
:なし
*; 機能
:qsort関数とは、先頭の要素をbaseが指す(要素数がnmemb個で各要素の大きさがsizeの)オブジェクトの配列を整列する関数である。
:配列の内容を、comparが指す比較関数に従って昇順に整列する。
:比較関数は、比較されるオブジェクトを指す二つの実引数を持って呼び出す。
:その関数は、以下の条件を満たす必要がある。
:*最初の実引数が2番目の実引数より小さい場合、0より小さい整数を返す
:*最初の実引数が2番目の実引数と等しい場合、0と等しい整数を返す
:*最初の実引数が2番目の実引数より大きい場合、0より大きい整数を返す
:二つの要素が等しいとき、整列された配列内でのそれらの順序は未規定である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
806 行
=== abs, labs, 及びllabs関数 ===
<ref>『JISX3010:2003』p.230「7.20.6.1 abs, labs, 及びllabs関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
int abs(int j);
813 行
long long int llabs(long long int j);
</syntaxhighlight>
*; 引数
:j 整数
*; 返却値
:絶対値。
*; 機能
:abs関数とは、整数jの絶対値を計算する関数である。
:labs関数とは、整数jの絶対値を計算する関数である。
:llabs関数とは、整数jの絶対値を計算する関数である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
837 行
=== div, ldiv 及びlldiv関数 ===
<ref>『JISX3010:2003』p.230「7.20.6.2 div, ldiv, 及びlldiv関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
div_t div(int numer, int denom);
844 行
lldiv_t lldiv(long long int numer, long long int denom);
</syntaxhighlight>
*; 引数
:numer 割られる数
:denom 割る数
*; 返却値
:メンバのquotにnumer/denom(商)、remにnumer%denom(剰余)を含んだ構造体。
*; 機能
:div関数は、一回の呼び出しでnumer/denom(商)及びnumer%denom(剰余)の両方を計算する関数である。
:ldiv関数は、一回の呼び出しでnumer/denom(商)及びnumer%denom(剰余)の両方を計算する関数である。
:lldiv関数は、一回の呼び出しでnumer/denom(商)及びnumer%denom(剰余)の両方を計算する関数である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
873 行
=== mblen関数 ===
<ref>『JISX3010:2003』p.231「7.20.7.1 mblen関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
int mblen(const char *s, size_t n);
</syntaxhighlight>
*; 引数
:s 多バイト文字
:n バイト個数
*; 返却値
:sが空ポインタである場合、多バイト文字の表現形式が、シフト状態に依存しているとき、0以外の値。それ以外の場合、0。
:sが空ポインタでない場合、sがナル文字を指すとき0。次のn個以下のバイト長が正しい多バイト文字を形成するとき、その多バイト文字を構成するバイト数。それらが正しい多バイト文字を形成しないとき-1。
*; 機能
:mblen関数とは、sが空ポインタでないとき、sが指す多バイト文字を構成するバイト数を決定し、返却する関数である。
:mbtowc関数の変換状態が影響を受けないことを除き、
:<syntaxhighlight lang=c>
mbtowc((wchar_t *)0, s, n)
</syntaxhighlight>
:と等価である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
911 行
=== mbtowc関数 ===
<ref>『JISX3010:2003』p.231「7.20.7.2 mbtowc関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
int mbtowc(wchar_t * restrict pwc, char * restrict s, size_t n);
</syntaxhighlight>
*; 引数
:pwc 値を格納するオブジェクト
:s 多バイト文字
:n バイト個数
*; 返却値
:sが空ポインタである場合、多バイト文字の表現形式が、シフト状態に依存しているとき0以外の値、それ以外の場合0。
:sが空ポインタでない場合、sがナル文字を返すとき0。次のn個以下のバイト列が正しいバイト文字を形成するときその多バイト文字を構成するバイト数。それらが正しい多バイト文字を形成しないとき-1。
:※返却値はnもマクロMB_CUR_MAXの値も超えることはない。
*; 機能
:mbtowc関数の動作は以下のとおりである。
#sが空ポインタでない場合、sが指すバイトから最大nバイト検査し、次の多バイト文字が完了するまでのバイト数を決定する。
#次の多バイト文字が正しく完了していれば、多バイト文字に対応するワイド文字の値を決定する。
#次に、pwcが空ポインタでない場合、pwcが指すオブジェクトにこの値を格納する関数である。対応するワイド文字がナルワイド文字である場合、この関数の状態は初期変換状態になる。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
951 行
=== wctomb関数 ===
<ref>『JISX3010:2003』p.232「7.20.7.3 wctomb関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
int wctomb(char *s, wchar_t wc);
</syntaxhighlight>
*; 引数
:s 値を格納する配列
:wc ワイド文字
*; 返却値
:sが空ポインタである場合、多バイト文字の表現形式が、シフト状態に依存しているとき0以外の値、それ以外の場合0。
:sが空ポインタでない場合、wcの値が正しい多バイト文字に対応してないとき-1。それ以外の時、wcの値に対応する多バイト文字を構成するバイト数。
*; 機能
:wctomb関数の動作は以下のとおりである。
#wcで指定されるワイド文字に対応する多バイト文字を表現するために必要なバイト数を決定する。
#sが空ポインタでない場合、sが指す配列に多バイト文字の表現を格納する。格納される文字数は、MB_CUR_MAXを超えない。
#wcがナルワイド文字である場合、初期シフト状態に戻るために必要なシフトシーケンスがあればそれを格納し、さらになる文字を格納する。この場合、この関数の状態は初期変換状態になる。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
993 行
=== mbstowcs関数 ===
<ref>『JISX3010:2003』p.232「7.20.8.1 mbstowcs関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n);
</syntaxhighlight>
*; 引数
:pwcs 変換したワイド文字列を格納する配列
:s 変換する多バイト文字列
:n 変換したワイド文字列の文字数
*; 返却値
:不正な多バイト文字が含まれているとき、(size_t)(-1)。
:それ以外の場合、変更した配列要素の数(ただし終端ナルワイド文字は含めない)。
*; 機能
:mbstowcs関数とは、sが指す配列中の初期シフト状態で始まる多バイト文字の並びを、対応するワイド文字の並びに変換し、n個以下のワイド文字をpwcsが指す配列に格納する関数である。
:ナル文字は、ナルワイド文字に変換する。
1,013 行
:pwcsが指す配列内でn個以下の要素しか変更しない。
:領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
1,035 行
=== wcstombs関数 ===
<ref>『JISX3010:2003』p.233「7.20.8.2 wcstombs関数」</ref>
*; 形式
:<syntaxhighlight lang=c>
#include <stdlib.h>
size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n);
</syntaxhighlight>
*; 引数
:s 変換した多バイト文字列を格納する配列
:pwcs 変換するワイド文字列
:n 変換した多バイト文字列の文字数
*; 返却値
:正しい多バイト文字に対応しないワイド文字が含まれているとき、(size_t)(-1)。
:それ以外の場合、変更されたバイト数(ただし終端ナル文字は含めない)。
*; 機能
:wcstombs関数とは、pwcsが指す配列中のワイド文字の列を、初期シフト状態から始まる対応する多バイト文字の並びに変換し、sが指す配列に格納する関数である。
:ただし、多バイト文字が合計でnバイトの上限を超えるとき、又はナル文字が格納された時、配列への格納を終了する。
1,054 行
:sが指す配列内でnバイト以下の要素しか変更しない。
:領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義である。
*;
:<syntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
1,079 行
 
== 参考文献 ==
* 国際標準化機構/国際電気標準会議 [https://www.iso.org/obp/ui/#iso:std:iso-iec:9899:ed-4:v1:en ISO/IEC 9899:2018(en) Information technology — Programming languages — C](2018-07-05)
* 日本工業標準調査会(当時、現:日本産業標準調査会)『JISX3010 プログラム言語C』2003年12月20日改正
 
[[Category:C言語|ひようしゆんらいふらり いつはんゆうていりてい]]