ANSI C規格は,ANSI Cの処理系で提供される一連の関数とそれに関連する型およびマクロを定義しています。 この章では,すべてのCompaq Cプラットフォームに共通のANSI規格に準拠するライブラリ機能について簡単に説明します。 Compaq Cライブラリ・ルーチンとそのシステム環境での使用, および各オペレーティング・システムで使用可能な追加のヘッダ, 関数,型,およびマクロについての詳細は, 該当するCompaq Cライブラリ・ルーチンのマニュアルを参照してください。
すべてのライブラリ関数はヘッダ・ファイルに宣言されています。
ヘッダ・ファイルの内容をプログラムで使用可能にするには,
そのヘッダ・ファイルを #include
前処理命令で取り込みます。次にその例を示します。
#include <stddef.h>
各ヘッダ・ファイルは一連の関連する関数を宣言し,これらを使用するために必要な型とマクロを定義します。
標準ヘッダは次のとおりです。
<complex.h> (第9.2節)
<stdbool.h> (第9.11節)
<tgmath.h> (第9.16節)
ヘッダ・ファイルは,どのような順序でも取り込むことができます。
各ヘッダ・ファイルは所定のスコープ内で複数回取り込むことができ,
これは1回取り込んだ場合と同じ結果になります。
ただし,<assert.h> を取り込んだ場合の結果は NDEBUG
の定義によって異なります。ヘッダの取込みは外部宣言または定義の外側で,
そのヘッダに宣言または定義されている関数,型,またはマクロを参照する前に行います。
識別子が複数の取込みヘッダの中で宣言または定義されている場合,
この識別子を含む2番目以降のヘッダはこの識別子への最初の参照の後に取り込むことができます。
<assert.h> ヘッダは assert マクロを定義し,
別の場所で定義された別の
NDEBUG マクロを参照します。ソース・ファイル内の
<assert.h> が取り込まれた場所で
NDEBUG がマクロ名として定義されている場合には,
assert マクロは次のように定義されます。
#define assert(ignore) ((void) 0)
void assert(int expression);
assert マクロは失敗した特定の呼出しに関する情報を標準エラー・
ファイルに処理系定義の書式で書き込む。
次に,マクロは
abort 関数を呼び出す。assert マクロは値を返さない。
<complex.h> ヘッダ・ファイルは,マクロを定義し,
複素数算術をサポートする関数を宣言しています。
以下の各形式では,関数群を規定しています。 関数群には,主要な関数(1つ以上のdouble complex型のパラメータと, double complexまたはdouble型の返却値を持つ)が1つあります。 また,同じ名前で f および l の接尾語が付いた関数は,パラメータおよび 返却値がfloat型およびlong double型の,対応する関数です。
complex
_Complex に展開されます。
_Complex_I
const float _Complex 型の
定数式に展開されます。
虚数単位とは,i2 = imaginary
_Imaginary_I
_Imaginary と,
虚数単位の値を持つconst float _Imaginary 型の定数式に
展開されます。
I
_Imaginary_I または _Complex_I に展開されます。
_Imaginary_I が定義されていない場合,
I は _Complex_I に展開されます。
cacos 関数
#include <complex.h> double complex cacos(double complex z); float complex cacosf(float complex z); long double complex cacosl(long double complex z);
cacos 関数は,複素数 z の逆余弦を,分岐線法で
実数軸[-1,+1]の外側を除いて算出します。
cacos 関数は,複素数 z の逆余弦を
ラジアン単位の値で返します。
この値は,虚数軸に対しては数学的に無限の範囲にあり,
実数軸では[0,π]の範囲にあります。
casin 関数
#include <complex.h> double complex casin(double complex z); float complex casinf(float complex z); long double complex casinl(long double complex z);
casin 関数は,複素数 z の逆正弦を,分岐線法で
実数軸[-1,+1]の外側を除いて算出します。
casin 関数は,複素数 z の逆正弦を
ラジアン単位の値で返します。
この値は,虚数軸に対しては数学的に無限の範囲にあり,
実数軸では[-π/2,+π/2]の範囲にあります。
catan 関数
#include <complex.h> double complex catan(double complex z); float complex catanf(float complex z); long double complex catanl(long double complex z);
catan 関数は,複素数 z の逆正接を,分岐線法で
虚数軸[-i,+i]の外側を除いて算出します。
catan 関数は,複素数 z の逆正接を
ラジアン単位の値で返します。
この値は,虚数軸に対しては数学的に無限の範囲にあり,
実数軸では[-π/2,+π/2]の範囲にあります。
ccos 関数
#include <complex.h> double complex ccos(double complex z); float complex ccosf(float complex z); long double complex ccosl(long double complex z);
ccos 関数は,複素数 z の余弦を返します。
csin 関数
#include <complex.h> double complex csin(double complex z); float complex csinf(float complex z); long double complex csinl(long double complex z);
csin 関数は,複素数 z の正弦を返します。
ctan 関数
#include <complex.h> double complex ctan(double complex z); float complex ctanf(float complex z); long double complex ctanl(long double complex z);
ctan 関数は,複素数 z の正接を返します。
cacosh 関数
#include <complex.h> double complex cacosh(double complex z); float complex cacoshf(float complex z); long double complex cacoshl(long double complex z);
cacosh 関数は,複素数 z の双曲線逆余弦を,
分岐線法で実数軸1未満の値を除いて算出します。
cacosh 関数は,複素数 z の双曲線逆余弦を
ラジアン単位の値で返します。
この値は,実数軸の非負側の範囲にあり,
虚数軸では[-iπ,+iπ] の範囲にあります。
casinh 関数
#include <complex.h> double complex casinh(double complex z); float complex casinhf(float complex z); long double complex casinhl(long double complex z);
casinh 関数は,複素数 z の双曲線逆正弦を,
分岐線法で虚数軸[-i,+i]の外側を除いて算出します。
casinh 関数は,複素数の双曲線逆正弦の値を返します。
この値は,実数軸に対しては数学的に無限の範囲にあり,
虚数軸では[-iπ/2,+iπ/2]の範囲にあります。
catanh 関数
#include <complex.h> double complex catanh(double complex z); float complex catanhf(float complex z); long double complex catanhl(long double complex z);
catanh 関数は,複素数 z の双曲線逆正接を,
分岐線法で実数軸[-1,+1]の外側を除いて算出します。
catanh 関数は,複素数の双曲線逆正接の値を返します。
この値は,実数軸に対しては数学的に無限の範囲にあり,
虚数軸では[-iπ/2,+iπ/2]の範囲にあります。
ccosh 関数
#include <complex.h> double complex ccosh(double complex z); float complex ccoshf(float complex z); long double complex ccoshl(long double complex z);
ccosh 関数は,複素数 z の双曲線余弦
を返します。
csinh 関数
#include <complex.h> double complex csinh(double complex z); float complex csinhf(float complex z); long double complex csinhl(long double complex z);
csinh 関数は,複素数 z の双曲線正弦
を返します。
ctanh 関数
#include <complex.h> double complex ctanh(double complex z); float complex ctanhf(float complex z); long double complex ctanhl(long double complex z);
ctanh 関数は,複素数 z の双曲線正接
を返します。
cexp 関数
#include <complex.h> double complex cexp(double complex z); float complex cexpf(float complex z); long double complex cexpl(long double complex z);
cexp 関数は,複素数 z の基数 e の指数
を返します。
clog 関数
#include <complex.h> double complex clog(double complex z); float complex clogf(float complex z); long double complex clogl(long double complex z);
clog 関数は,複素数 z の自然対数 (基数 e) を,
分岐線法で負の実数軸に沿って除外して算出します。
clog 関数は,複素数の自然対数値を返します。
この値は,実数軸に対しては数学的に無限の範囲にあり,
虚数軸では[-iπ,+iπ]の範囲にあります。
cabs 関数
#include <complex.h> double cabs(double complex z); float cabsf(float complex z); long double cabsl(long double complex z);
cabs 関数は,複素数 z の絶対値
(ノルム,モジュロ,またはマグニチュードともいう)を返します。
cpow 関数
#include <complex.h>
double complex cpow(double complex x, double complex y);
float complex cpowf(float complex x, float complex y);
long double complex cpowl(long double complex x,
long double complex y);
cpow 関数は,複素数の累乗関数 xy を,
分岐線法で負の実数軸に沿って1番目のパラメータを除外して算出します。
cpow 関数は,複素数の累乗関数値を返します。
csqrt 関数
#include <complex.h> double complex csqrt(double complex z); float complex csqrtf(float complex z); long double complex csqrtl(long double complex z);
csqrt 関数は,複素数 z の平方根を,
分岐線法で負の実数軸に沿って除外して算出します。
csqrt 関数は複素数の平方根値を返却します。
この値は,複素平面の右半分(虚数軸を含む)の範囲にあります。
carg 関数
#include <complex.h> double carg(double complex z); float cargf(float complex z); long double cargl(long double complex z);
carg 関数は,z の偏角 (位相角ともいう) を,
分岐線法で負の実数軸に沿って除外して算出します。
carg 関数は,偏角の値を返します。
この値は,[-π,+π]の範囲にあります。
cimag 関数
#include <complex.h> double cimag(double complex z); float cimagf(float complex z); long double cimagl(long double complex z);
cimag 関数は,z の虚数部を算出し,
実数として返します。
conj 関数
#include <complex.h> double complex conj(double complex z); float complex conjf(float complex z); long double complex conjl(long double complex z);
conj 関数は,複素数 z の共役複素数を,
虚数部の符号を逆にして算出します。
conj 関数は,複素数の共役複素数値を返します。
cproj 関数
#include <complex.h> double complex cproj(double complex z); float complex cprojf(float complex z); long double complex cprojl(long double complex z);
cproj 関数は,z の,
リーマン球面への射影を算出します。
すべての複素数の無限大(無限大部が1つとNaN部が1つのものも含む)が
実数軸上の正の無限大に射影するのを除き,
z は z に射影します。
z に無限大部がある場合,cproj(z) は次の式と同じ
になります。
INFINITY + I * copysign(0.0, cimag(z))
cproj 関数は,リーマン球面への射影の値を返します。
creal 関数
#include <complex.h> double creal(double complex z); float crealf(float complex z); long double creall(long double complex z);
creal 関数は,z の実数部を返します。
複素数型の変数 z について, z == creal(z) + cimag(z)*I が成り立ちます。
<ctype.h> ヘッダ・ファイルは,文字を検査するための複数の関数を宣言します。
各関数とも実引数は int
であり,値は EOF または
unsigned char として表現可能なものでなければなりません。
返却値は整数です。
int isalnum(int c);
isalnum は0
を返す。
int isalpha(int c);
isalpha は0
を返す。
int iscntrl(int c);
iscntrl は0を返す。
int isdigit(int c);
isdigit
は0を返す。
int isgraph(int c);
isgraph は0を返す。
int islower(int c);
islower
は0を返す。
int isprint(int c);
isprint は0を返す。
int ispunct(int c);
ispunct
は0を返す。
int isspace(int c);
isspace は0を返す。
標準空白文字は次のとおり。
int isupper(int c);
isupper
は0を返す。
int isxdigit(int c);
isxdigit は0を返す。
int tolower(int c);
c は大文字以外の場合には変更されない。
int toupper(int c);
c は小文字以外の場合には変更されない。
<errno.h>ヘッダ・ファイルは,エラー報告に使用する複数のマクロを定義します。
EDOM
ERANGE
errno に格納できるエラー・コード。これは,0
以外の固有の値を持つ汎整数定数式に展開される。
errno
int型で可変左辺値に展開される外部変数またはマクロ。
errno変数は,ライブラリ・ルーチンからの処理系定義のエラー・
コードを保持するために使用する。エラー・コードはすべて正の整数。
errno の値はプログラム開始時には0
だが,ライブラリ関数によって0にセットされることはない。したがって,
errno はライブラリ関数を呼び出す前に0
にセットし,その後で検査を行う必要がある。
<limits.h> および
<float.h>ヘッダ・ファイルは,それぞれの処理系固有の限界および仮引数に展開される複数のマクロを定義します。
これらのマクロのほとんどは,
ハードウェアの整数および浮動小数点の特性を記述します。
詳細については,プラットフォームに固有のCompaq Cのマニュアルを参照してください。
<locale.h>ヘッダ・ファイルは2つの関数と1つの型を宣言し,
複数のマクロを定義します。
struct lconv
char *decimal_point; /* "." */
char *thousands_sep; /* "" */
char *grouping; /* "" */
char *int_curr_symbol; /* "" */
char *currency_symbol; /* "" */
char *mon_decimal_point; /* "" */
char *mon_thousands_sep; /* "" */
char *mon_grouping; /* "" */
char *positive_sign; /* "" */
char *negative_sign; /* "" */
char int_frac_digits; /* CHAR_MAX */
char frac_digits; /* CHAR_MAX */
char p_cs_precedes; /* CHAR_MAX */
char p_sep_by_space; /* CHAR_MAX */
char n_cs_precedes; /* CHAR_MAX */
char n_sep_by_space; /* CHAR_MAX */
char p_sign_posn; /* CHAR_MAX */
char n_sign_posn; /* CHAR_MAX */
これらのメンバについては,この節の
localeconv関数の項で説明します。
NULL
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MONETARY
LC_NUMERIC
LC_TIME
setlocale関数の最初の実引数として使用できる。
char *setlocale(int category, const char
*locale);
category実引数には次の値を指定できる。
strcoll および
strxfrm関数の動作に影響を及ぼす。
localeconv関数によって返される通貨の書式化情報に影響を及ぼす。
localeconv関数によって返される非通貨数量の書式化情報に影響を及ぼす。
strftime関数の動作に影響を及ぼす。
locale実引数には次の値を指定できる。
LANG環境変数を使用する。LANG
もセットしなければ,エラーが返される。
プログラムの開始処理時に次に示す関数が実行される。
setlocale(LC_ALL, "C");
setlocale関数は次のいずれか1つを返す。
setlocale
は指定された category
に関連する文字列へのポインタを新しいロケールとして返す。
この選択が受け入れられなかった場合には,
setlocale は空ポインタを返し,プログラムのロケールは変更されない。
setlocale は
category に関連する文字列へのポインタをプログラムの現在のロケールとして返す。
プログラムのロケールは変更されない。
返される文字列へのポインタはいずれの場合も,後続の呼出しでこの文字列値とその関連カテゴリを使用することによって,
プログラムのロケールのその部分がリストアされる。
この文字列をプログラムによって変更することはできないが,
後続の
setlocale の呼出しによって重ね書きできる。
struct lconv *localeconv(void);
struct lconv型のオブジェクトの構成要素を,現在のロケールの規則に従って数値を書式化するのに適切な値でセットする。
char*型の構造体メンバは文字列へのポインタであり,
decimal_point 以外のいずれのメンバも""
を示すことができる。"" は値の長さが0
であるか,現在のロケールで使用不可能であることを示す。
char型の構造体メンバは非負数であり,そのいずれも
CHAR_MAX となって,値が現在のロケールで使用不可能であることを示すことができる。
構造体メンバには次のものがある。
char *decimal_point
char *thousands_sep
char *grouping
char *int_curr_symbol
char *currency_symbol
char *mon_decimal_point
char *mon_thousands_sep
char *mon_grouping
char *positive_sign
char *negative_sign
char int_frac_digits
char frac_digits
char p_cs_precedes
currency_symbol が非負数の書式化された通貨数量の値に先行する場合には,1
にセットされる。
currency_symbol がこの値の後に続く場合には,0
にセットされる。
char p_sep_by_space
currency_symbol が非負数の書式化された通貨数量の値から空白で区切られている場合には,1
にセットされる。
空白がない場合には0にセットされる。
char n_cs_precedes
currency_symbol が負数の書式化された通貨数量の値に先行する場合には,1
にセットされる。
currency_symbol がこの値の後に続く場合には0
にセットされる。
char n_sep_by_space
currency_symbol が負数の書式化された通貨数量の値から空白で区切られている場合には,1
にセットされる。
空白がない場合には0にセットされる。
char p_sign_posn
positive_sign の位置決めを示す値にセットされる。
char n_sign_posn
negative_
sign の位置決めを示す値にセットされる。
grouping および mon_
grouping の要素は,次のように解釈される。
CHAR_MAX -これ以上のグループ化は行われない。
p_sign_posn および n_
sign_posn の値は,次のように解釈される。
currency_symbol
を括弧で囲む。
currency_
symbol に先行する。
currency_
symbol の後に続く。
currency_symbol
の直前にくる。
currency_symbol
の直後に続く。
localeconv関数は構造体の空ではない部分へのポインタを返す。
構造体をプログラムによって変更することはできないが,
localeconv または
setlocale へのその後の呼出しで
LC_ALL,LC_
MONETARY,または LC_NUMERIC
カテゴリを指定することによって,重ね書きできる。
<math.h>ヘッダ・ファイルは,型,マクロと複数の算術関数を定義します。
関数は double実引数を取り,
倍精度値を返します。
このヘッダ中の各関数の動作は,それぞれの入力実引数のすべての表現可能な値に対して定義されます。 各関数は単一演算と同様に実行され,外部的に認識できる例外は生じません。
すべての関数について,算術関数が定義されている定義域の外側に入力実引数がある場合,
定義域エラーが起こります。定義域エラーが起こるかどうかは各関数の説明に記載しています。
定義域エラーが起こると関数は処理系定義の値を返し,
EDOM
マクロの値が errno に格納されます。
すべての関数について,関数の結果を double値として表現できない場合,
範囲エラーが起こります。
結果がオーバフローした場合(結果が大きすぎて,
指定した型のオブジェクト内で表現できない場合),
関数は関数の正しい値と同じ符号で(tan
関数の場合を除く), HUGE_VALマクロの値を返します。
ERANGEマクロの値が errno
に格納されます。結果がアンダフローした場合(結果が小さすぎて,
指定した型のオブジェクト内で表現できない場合),関数は0を返します。
ERANGEマクロの値が errno
に格納されるかどうかは,それぞれの処理系定義によって異なります。
HUGE_VAL
double式に展開する。
INFINITY
float型の定数式に展開する。
それ以外では,
変換時にオーバフローになるfloat型の正の定数に展開する。
NAN
float型の定数式に展開する。
double acos(double x);
double asin(double x);
double atan(double x);
double atan2(double y, double x);
double cos(double x);
double sin(double x);
double tan(double x);
double cosh(double x);
double sinh(double x);
double tanh(double x);
double exp(double x);
double frexp(double value, int *eptr);
intオブジェクトに格納される。
value が0の場合,結果は両方の部分とも0
になる。
double ldexp(double x, int exp);
double log(double x);
double log10(double x);
double modf(double value, double
*iptr);
modf関数は符号付き小数部を返し,
iptr
が示すオブジェクトに double
として整数部を格納する。
double pow(double x, double y);
double sqrt(double x);
double ceil(double x);
double fabs(double x);
double floor(double x);
double fmod(double x, double y);
fmod関数は,i を整数とすると
x - i * y を返す。
y が0以外の場合,結果は x
と同じ符号になり,大きさは y
よりも小さくなる。y が0の場合,関数は0を返す。
<setjmp.h>ヘッダ・ファイルには,通常の関数呼出しと戻りの処理を行わずに,
ネストされた関数呼出しから途中で戻ることを可能にする方法を提供する宣言が含まれています。
int setjmp(jmp_buf env)
jmp_bufバッファを設定し,
飛越しのために初期化する(飛越し自体は
longjmp で実行される)。このマクロは,プログラムの呼出し環境を
env実引数によって指定された環境バッファに保存し,
後に longjmp関数がこれを使用できるようにする。
setjmp
関数の直接の呼出しの場合,setjmp は0を返す。
longjmp への呼出しからの戻りの場合,
setjmp は0以外の値を返す。
jmp_buf
void longjmp(jmp_buf env, int value);
setjmp関数の呼出しによって保存された,
env環境バッファのコンテキストをリストアする。
longjmp関数はネストされたシグナル・
ハンドラから呼び出された場合には動作せず,その動作結果は定義されていない。
valueによって指定された値は,longjmp
から setjmp へ渡される。
longjmp の完了後,それに対応する
setjmp の呼出しによって
value が返された場合と同様に,プログラムは続行する。
value が0として
setjmp に渡された場合には,1に変換される。
<signal.h>ヘッダ・ファイルは1つの型と2つの関数を宣言し,
プログラム実行中に報告される可能性がある例外条件を処理するための複数のマクロを定義します。
sig_atomic_t
SIG_DFL
SIG_ERR
SIG_IGN
signal関数の第2実引数,およびこの関数の返却値と互換性がある型を持つ値の定数式にそれぞれ展開する。
この値は,
宣言可能な関数のアドレスとは等しくない。
void (*signal(int sig, void (*handler) (int))) (int);
handler の値が
SIG_DFL の場合,そのシグナルの省略時の処理が起こる。
handler の値が
SIG_IGN の場合,シグナルは無視される。
handler が示す関数がシグナルの型の実引数で呼び出される。
このような関数をシグナル・ハンドラ
と呼ぶ。有効なシグナルは次のとおり。
abort関数。
その他のシグナルは,各オペレーティング・システムに依存する。
要求が受け入れられた場合,signal関数は指定した
sigシグナルに対する
signal への最新の呼出しに対して
handler の値を返す。要求が受け入れられなかった場合には,
SIG_ERR の値が返され,処理系定義の正の値が
errno に格納されます。
int raise(int sig);
sig シグナルを実行プログラムに送る。
raise関数は成功した場合には0を返し,成功しなかった場合には0
以外の値を返す。
<stdarg.h>ヘッダ・ファイルは1つの型を宣言し,3つのマクロを定義して,
可変個の数と型を持つ関数の実引数並びの処理を行います。
va_list
va_start,va_arg,および
va_endマクロが必要とする情報を保持するのに適切な型。
可変個の実引数にアクセスするには,呼び出された関数は
va_list型のオブジェクトを宣言しなければならない。
次の例では,apがオブジェクト。
va_list ap;
apオブジェクトは,実引数として別の関数に渡すことができる。
その関数が
ap仮引数で va_argマクロを呼び出した場合,
呼出し関数の中の ap の値は不定になり,
ap への次の参照を行う前に
va_endマクロへ渡される。
void va_start(va_list ap,parmN);
va_arg および va_
end が使用できるようにする。未指名の実引数にアクセスする前には,
va_startマクロを呼び出さなければならない。
parmN仮引数は,関数定義の可変個仮引数並び中の右端の仮引数の識別子。
parmN を register記憶域クラス,
関数型または配列型,あるいは省略時の実引数拡張の適用後に生じる型と互換性を持たない型で宣言した場合の動作結果は定義されていない。
va_startマクロは値を返さない。
type va_arg(va_list ap, type);
va_start
によって初期化された va_list ap
と同じ。va_arg を呼び出すたびに
ap が変更され,連続する実引数の値が順に返される。
type仮引数は指定された型名であり,type
の後にアスタリスク( * )を付けることによって,
指定した型のオブジェクトへのポインタの型を取得することができる。
次の実引数がない場合,または type
が(省略時の実引数拡張によって拡張された)次の実引数の型と互換性を持たない場合の動作結果は定義されていない。
va_start の呼出しの後に初めて
va_arg を呼び出すと,parmN
によって指定された後の実引数の値を返す。連続して呼び出すと,
残りの実引数の値を順に返す。
void va_end(va_list ap);
va_list apオブジェクトを初期化した
va_start の展開によって可変個実引数並びが参照された関数から通常の返却値を返す。
va_endマクロは
ap を変更して,(va_
start の呼出しなしには)使用できないようにすることができる。
対応する va_start
が呼び出されなかった場合,または戻る前に va_
end
が呼び出されなかった場合の動作結果は定義されていない。
va_endマクロは値を返さない。
<stdbool.h>ヘッダ・ファイルは,
マクロを4つ定義しています。
bool
_Boolに展開されます。
true
false
__bool_true_false_are_defined
#if前処理命令内で使用するのに適しています。
trueは,整数定数1に展開されます。
falseは,整数定数0に展開されます。
__bool_true_false_are_definedは,整数定数1に展開されます。
<stddef.h>ヘッダ・ファイルは複数の型とマクロを定義し,
そのいくつかは他のヘッダ・ファイルにも定義されています。
ptrdiff
size_t
sizeof演算子の結果を表す符号なし汎整数型。
wchar_t
NULL
offsetof(type, member-designator)
type で指定した)構造体の先頭から(
member-designator で指定した)
構造体メンバへのバイト単位のオフセットとして
size_t型の汎整数定数式に展開する。member-
designator は,次に示すような式
&(t.member-designator) をアドレス定数として評価される。
static type t;
指定したメンバがビット・フィールドの場合の動作結果は定義されていない。
<stdio.h>ヘッダ・ファイルは,テキストの入出力を行うための3
つの型,複数のマクロ,および多数の関数を宣言します。テキスト・
ストリームは一連の行からなり,各行は改行文字で終わります。
size_t
sizeof演算子の結果の符号なし汎整数型。
FILE
fpos_t
NULL
_IOFBF
_IOLBF
_IONBF
setvbuf関数の第3実引数として使用するために,適切なそれぞれの値の汎整数定数式に展開する。
BUFFSIZ
setbuf関数が使用するバッファのサイズ。
EOF
FOPEN_MAX
FILENAME_MAX
char
の配列で保持するのに必要なサイズ。
L_tmpnam
tmpnam関数によって作成された一時的ファイル名の文字列を
char の配列で保持するのに必要なサイズ。
SEEK_CUR
SEEK_END
SEEK_SET
fseek関数の第3実引数として使用するために,適切なそれぞれの値の汎整数定数式に展開する。
TMP_MAX
tmpnam関数が生成できる固有のファイル名の最大数である汎整数定数式に展開する。
stderr
stdin
stdout
FILEオブジェクトをそれぞれ示す
FILE へのポインタ型の式。
int remove(const char *filename);
remove関数は操作が成功した場合には0を返し,失敗した場合には0
以外を返す。ファイルがオープンされた場合,この関数の動作は各処理系定義により異なる。
int rename(const char *old, const char
*new);
rename関数は操作が成功した場合には0を返し,
失敗した場合には0以外を返す。ただし,失敗した場合でそのファイルが存在している場合には,
元の名前のままで識別される。
rename を呼び出す前に新しいファイルが存在している場合には,
この関数の動作は各処理系定義により異なる。
FILE *tmpfile(void);
wb+モードで行われる(
表 9-1を参照のこと)
。tmpfile関数は作成したファイルのストリームへのポインタを返す。
ファイルを作成できない場合には,
tmpfile は空ポインタを返す。
FILE *tmpnam(void);
tmpnam の呼出しを最高で
TMP_MAX回まで行うたびに,異なる名前が作成される。
tmpnam の呼出しを
TMP_MAX回よりも多く行った場合の動作は,各処理系定義により異なる。
実引数が空ポインタの場合には,tmpnam関数はその結果を内部の静的オブジェクトに残し,
このオブジェクトへのポインタを返す。
これ以降の tmpnam
の呼出しで,この同じオブジェクトを変更することができる。実引数が空ポインタではない場合には,
少なくとも L_
tmpnam chars の配列へのポインタとみなされる。
tmpnam関数はその結果をこの配列へ書き込み,実引数をその値として返す。
int fclose(FILE *stream);
fclose関数はストリームのクローズが成功した場合には0
を返し,エラーが検出された場合には
EOF を返す。
int fflush(FILE *stream);
fflush関数はまだ書き込んでいないデータをホスト環境に転送し,
ファイルに書き込む。それ以外の場合の動作結果は定義されていない。
stream
が空ポインタの場合には,fflush は出力ストリームまたは更新ストリーム(
最新の操作が入力ではない)のすべてをフラッシュする。
fflush関数は操作が成功した場合は0
を返し,書込みエラーが起きた場合は EOF
を返す。
FILE *fopen(const char *filename, const char
*mode);
| モード | 説明 |
|---|---|
r | 読込みのためにテキスト・ファイルをオープンする。 |
w
| 長さ0に切り捨てるか,または書込みのためにテキスト・ ファイルを作成する。 |
a | 追加。ファイルの終わりに書き込むためにテキスト・ ファイルをオープンまたは作成する。 |
rb |
読込みのためにバイナリ・ファイルをオープンする。 |
wb | 長さ0に切り捨てるか, または書込みのためにバイナリ・ファイルを作成する。 |
ab |
追加。ファイルの終わりに書き込むためにバイナリ・ファイルをオープンまたは作成する。 |
r+ | 更新(読込みおよび書込み) のためにテキスト・ファイルをオープンする。 |
w+ | 長さ0に切り捨てるか, または更新のためにテキスト・ファイルを作成する。 |
a+ | 追加。更新とファイルの終わりに書き込むためにテキスト・ ファイルをオープンまたは作成する。 |
r+b または
rb+ | 更新(読込みおよび書込み)のためにバイナリ・ ファイルをオープンする。 |
w+b または wb+ | 長さ0 に切り捨てるか,または更新のためにバイナリ・ファイルを作成する。 |
a+b または
ab+ | 追加。更新とファイルの終わりに書き込むためにバイナリ・ ファイルをオープンまたは作成する。 |
fopen関数はストリームを制御するオブジェクトへのポインタを返す。
オープン操作が失敗した場合,fopen
は空ポインタを返す。
FILE *freopen(const char *filename, const char
*mode, FILE *stream);
fopen関数と同様に使用される。
freopen
関数は最初に,指定したストリームに関連するファイルをクローズしようとする。
ファイルのクローズが成功しなかった場合には無視される。
ストリームに関するエラーおよびファイル終了指示子がリセットされる。
freopen は主に,標準テキスト・ストリーム(
stderr,stdin,または
stdout )
に関連するファイルを変更する際に使用する。これは,
fopen関数により返される値を代入できる可変左辺値をこれらの指示子が必要としないからである。
freopen関数はストリームを制御するオブジェクトへのポインタを返す。
オープン操作が失敗した場合,
freopen は空ポインタを返す。
void setbuf(FILE *stream, char *buf);
setbuf関数は
setvbuf関数と同じ。setvbuf関数は,
mode が _IOFBF
で,size が
BUFSIZ で,mode が
_IONBF の場合(buf
が空ポインタの場合)に呼び出される関数である。
int setvbuf(FILE *stream, char *buf, int
mode size_t size);
setvbuf関数は,stream
が示すストリームがオープンしたファイルに関連付けられた後で,
その他の操作をストリーム上で実行する前に実行することができる。
mode実引数は,
stream をバッファ内に格納する方法を決定する。
IOFBF は入出力を完全にバッファ内に格納する。
IOLBF は入出力を行バッファ内に格納する。
IONBF は入出力をバッファ内に格納しない。
buf が空ポインタ以外の場合は
setvbuf関数で割り当てたバッファの代わりに,示される配列を使用することができる。
配列のサイズは
size で指定する。ある時点での配列の内容は不定である。
setvbuf関数は成功した場合には0を返し,
mode に無効な値を指定した場合,または要求を受け入れることができない場合には0
以外の値を返す。
int fprintf(FILE *stream, const char *format,
...);
fprintf関数は書式文字列の終わりに達すると戻る。
fprintf 関数は転送された文字の数を返し,出力エラーが起きた場合は負の値を返す。
詳細については,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
int fscanf(FILE *stream, const char
*format,...);
fscanf関数は,変換の前に入力の失敗が起こった場合に
EOFマクロの値を返す。それ以外の場合には,
fscanf は代入した入力項目の数を返す。
この数は入力された数より少ないことがあり,一致しない場合には0
になることもある。
詳細については,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
int printf(const char *format, ...);
printf が標準出力ストリーム(
stdout )に書式付き出力を書き込む点を除き,
fprintf関数と等価である。
int scanf(const char *format, ...);
scanfが標準入力ストリーム(
stdin )から書式付き入力を読み込む点を除き,
fscanf関数と等価である。
int sprintf(char *s, const char *format,
...);
fprintf関数と等価である。
書き込まれた文字の終わりにはヌル文字が書き込まれる。重複するオブジェクト間でコピーが行われた場合の動作は定義されていない。
sprintf関数は配列へ書き込まれた文字の数を返す。
終了ヌル文字はカウントされない。
int sscanf(const char *s, const char *format,
...);
fscanf関数と等価である。文字列の終わりに達することは,
fscanf関数がファイルの終わりに達することと同じことを示す。
重複するオブジェクト間でコピーが行われた場合の動作結果は定義されていない。
#include <stdarg.h>
int vfprintf(FILE *stream, const char *format,
va_list arg);
fprintf関数と等価ですが,arg
に置き換えられた可変個の実引数並びは,
va_startマクロ(および場合により後続の
va_arg 呼出し)によって初期化されていなければならない。
vfprintf関数は va_endマクロを呼び出さない。
#include <stdarg.h>
int vprintf(const char *format, va_list
arg);
printf関数と等価ですが,arg
に置き換えられた可変個の実引数並びは,
va_startマクロ(および場合により後続の
va_arg 呼出し)によって初期化されていなければならない。
vprintf関数は va_endマクロを呼び出さない。
#include <stdarg.h>
int vsprintf(char *s, const char *format, va_
list arg);
sprintf関数と等価ですが,arg
に置き換えられた可変個の実引数並びは,
va_startマクロ(および場合により後続の
va_arg 呼出し)によって初期化されていなければならない。
vsprintf関数は va_endマクロを呼び出さない。
int fgetc(FILE *stream);
int へ変換された
unsigned char として返し,ストリームの関連するファイル位置指示子(
定義されている場合)を進める。
ストリームがファイルの終わりである場合にはストリームのファイル終了指示子がセットされ,
fgetc は
EOF を返す。読込みエラーが起きた場合はエラー指示子がセットされ,
fgetc
は EOF を返す。
char *fgets(char *s, int n, FILE
*stream);
成功した場合,fgets関数は s
を返す。ファイルの終わりに達し,文字が配列へ読み込まれなかった場合には配列の内容は変更されず,
空ポインタが返される。操作中に読込みエラーが起きた場合は配列の内容は不定になり,
空ポインタが返される。
int fputc(int c, FILE *stream);
unsigned char
へ変換される)を,stream が示す出力ストリームに関連するファイル位置指示子(
定義されている場合)が指示する位置に書き込み,
必要に応じて指示子を進める。ファイルが位置決め要求をサポートできない場合,
またはストリームが追加モードでオープンされた場合には,
出力ストリームへ文字が追加される。
fputc関数は書き込まれた文字を返す。
書込みエラーが起きた場合はストリームのエラー指示子がセットされ,
fputc は EOF
を返す。
int fputs(const char *s, FILE *stream);
書込みエラーが起きた場合,fputs関数は
EOF を返し,それ以外の場合は負以外の値を返す。
int getc(FILE *stream);
fgetc関数と等価である。
このため,実引数は副作用がある式であってはならない。
int getchar(void);
stdin実引数を持つ getc関数と等価である。
char *gets(char *s);
stdin が示す入力ストリームから
s が示す配列へ,ファイルの終わりに達するか改行文字が読み込まれるまで文字を読み込む。
改行文字は破棄され,
配列へ読み込まれた最後の文字の直後にヌル文字が書き込まれる。
成功した場合,fgets関数は s
を返す。ファイルの終わりに達し,文字が配列へ読み込まれなかった場合には配列の内容は変更されず,
空ポインタが返される。操作中に読込みエラーが起きた場合は配列の内容は不定になり,
空ポインタが返される。
int putc(int c, FILE *stream);
fputc関数と等価である。
このため,実引数は副作用がある式であってはならない。
int putchar(int c);
stdout第2実引数を持つ
putc関数と等価である。
int puts(const char s);
stdout が示すストリームへ書き込み,
出力に改行文字を追加する。終了ヌル文字は書き込まれない。
書込みエラーが起きた場合,puts関数は
EOF を返し,それ以外の場合には負以外の値を返す。
int ungetc(int c, FILE *stream);
unsigned char
に変換される)を,stream が示す入力ストリームへプッシュ・
バックし,ストリームをその文字の前の位置のままにしておく。
プッシュ・バックされた文字は,このストリーム上の次の読込みによって,
プッシュ・バックされたのとは逆順で返される。
このストリームに対するファイル位置決め関数(
fseek,fsetpos,または
rewind )の呼出しに成功すると,プッシュ・バックされた文字は破棄される。
ファイル上に前の処理が存在しない場合でも,1回のプッシュ・バックが保証される。
ungetc関数は変換済みのプッシュ・バックされた文字を返すか,
または操作が失敗した場合には
EOF を返す。
size_t fread(void *ptr, size_t size, size_t
nmemb, FILE *stream);
fread関数は読込みに成功した要素の数を返すが,
読込みエラーまたはファイルの終わりを検出した場合は
nmemb より少なくなる。size
または nmemb が0の場合には
fread は0を返し,配列の内容とストリームの状態は変更されない。
size_t fwrite(const void *ptr, size_t size,
size_t nmemb, FILE *stream);
fwrite関数は書込みに成功した要素の数を返すが,書込みエラーが見つかった場合にのみ
nmemb
より少なくなる。
int fgetpos(FILE *stream, fpos_t *pos);
fgetpos
関数を呼び出したときに,fsetpos関数がストリームをその位置に返すために使用する。
成功した場合,fgetpos関数は0を返す。失敗した場合,
fgetpos は0以外を返し,処理系定義の正の値を
errno に格納する。
int fseek(FILE *stream, long int offset, int
whence);
バイナリ・ストリームの場合,ファイルの先頭からの文字数で新しい位置を取得するには offset を whence で指定する位置に追加する。この位置は次のいずれかである。
SEEK_
SET の場合,ファイルの先頭
SEEK_
CUR の場合,ファイル位置指示子の現在値
SEEK_
END の場合,ファイルの終わり
テキスト・ストリームの場合,offset
は0になるか,または同じストリームに対する
ftell関数への以前の呼出しによって返された値になる。
whence は
SEEK_SET になる。
fseek への呼出しが成功すると,ストリームのファイル終了指示子はリセットされ,
同じストリーム上での
ungetc関数の効果は取り消される。
fseek を呼び出した後,更新ストリーム上での次の操作は入力または出力になる。
要求を満足させることができない場合にのみ,
fseek関数は0以外の値を返す。
int fsetpos(FILE *stream, const fpos_t
*pos);
fgetpos 関数への以前の呼出しから得られる。
fsetpos への呼出しが成功するとストリームのファイル終了指示子はリセットされ,
同じストリーム上での
ungetc関数の効果は取り消される。
fsetpos を呼び出した後,更新ストリーム上での次の操作は入力または出力になる。
成功した場合,fsetpos関数は0を返す。失敗した場合,
fsetpos は0以外を返し,処理系定義の正の値を
errno に格納する。
long int ftell(FILE *stream);
ftell関数を呼び出したときに,fseek関数がストリームのファイル位置指示子をその位置に返すために使用する。
この2つの返却値の差は,必ずしも書込みまたは読込みが行われた文字数の意味ある尺度ではない。
成功した場合,ftell関数はストリームのファイル位置指示子の現在値を返す。
失敗した場合,ftell
は-1Lを返し,処理系定義の正の値を
errno に格納する。
void rewind(FILE *stream);
(void)fseek(stream, 0L, SEEK_SET)
rewind関数は値を返さない。
void clearerr(FILE *stream);
clearerr関数は値を返さない。
int feof(FILE *stream);
feof関数はファイル終了指示子が
stream に対してセットされた場合にのみ,0
以外の値を返す。
int ferror(FILE *stream);
stream
に対してセットされた場合にのみ,ferror関数は0
以外の値を返す。
void perror(const char *s);
errno整数式のエラー番号をエラー・メッセージにマップする。
次に示す文字列を標準エラー・ストリームへ書き込む。
エラー・メッセージ文字列の内容は errno実引数を持つ
strerror関数が返すものと同じであり,
処理系定義である。perror関数は値を返さない。
<stdlib.h>ヘッダ・ファイルは汎用の4つの型と複数の関数を宣言し,
複数のマクロを定義します。関数は文字列変換,乱数生成,検索とソート,
メモリ管理,およびそれに類似したタスクを実行します。
size_t
sizeof演算子の結果の符号なし汎整数型。
wchar_t
div_t
div関数によって返される値の型である構造体型。
ldiv_t
ldiv関数によって返される値の型である構造体型。
NULL
EXIT_FAILURE /EXIT_SUCCESS
exit関数の実引数として使用して,それぞれ不成功または成功の終了状態をホスト環境に返すための汎整数式に展開する。
これらのマクロは,main関数からの返却値としても有用である。
RAND_MAX
rand関数から返される最大値を持つ汎整数定数式に展開する。
MB_CUR_MAX
LC_TYPE カテゴリ)で指定されている拡張文字集合の多バイト文字中の最大バイト数の値を持つ正の汎整数式に展開する。
この値は,常に
MB_LEN_MAX 以下である。
double atof(const char *nptr);
double表現に変換し,変換された値を返す。エラー発生時の動作を除き,
この関数は次に示すものと等価である。
strtod(nptr, (char **)NULL)
int atoi(const char *nptr);
int表現に変換し,変換された値を返す。エラー発生時の動作を除き,
この関数は次に示すものと等価である。
(int)strtol(nptr, (char **)NULL, 10)
long int atol(const char *nptr);
long
int表現に変換し,変換された値を返す。エラー発生時の動作を除き,
この関数は次に示すものと等価である。
strtol(nptr, (char **)NULL, 10)
double strtod(const char *nptr, char
**endptr);
double表現に変換する。
この関数についての詳細は,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
long int strtol(const char *nptr, char
**endptr, int base);
long
int表現に変換する。
この関数についての詳細は,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
unsigned long int strtoul(const char *nptr, char
**endptr, int base);
unsigned long int 表現に変換する。
この関数についての詳細は,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
int rand(void);
RAND_MAX
の範囲で返す。
void srand(unsigned int seed);
rand 呼出しによって返される新しい擬似乱整数列のシードとして使用する。
その後に srand が同じシード値で呼び出された場合には,
同じ擬似乱整数列が繰り返される。
srand への呼出しを行う前に
rand が呼び出された場合,生成される列は
srand をシード値1で最初に呼び出したときと同じ。
srand関数は値を返さない。
void *calloc(size_t nmemb, size_t
size);
calloc関数は空ポインタを返し,それ以外の場合には割り当てた領域へのポインタを返す。
void free(void *ptr);
calloc,malloc,または
realloc によって以前に割り当てられたメモリ領域である。
ptr が空の場合には割当ての解除は行われない。
値も返されない。
void *malloc(size_t size);
void *realloc(void *ptr, size_t size);
realloc
の動作は malloc と同一になる。
領域の内容は,旧サイズと新サイズのいずれか小さいサイズまでは変更されない。
サイズ変更できなかった場合,この関数は空ポインタを返し,
それ以外の場合には移送した再割当て済みの領域へのポインタを返す。
void abort(void);
SIGABRTシグナルが見つかり,シグナル・
ハンドラが返らない限りプログラムの異常終了が起こる。
abort関数は呼び出す側に値を返すことはできない。
int atexit(void (*func)(void));
atexit関数は0を返す。それ以外の場合は0以外を返す。
void exit(int status);
exit の呼出しを複数回実行した場合の動作結果は定義されていない。
実行時には次のことが起こる。
atexit によって登録されたすべての関数が,
登録と逆順で呼び出される。
tmpfile によって作成されたすべてのファイルが削除される。
errno値に対応する。
EXIT_
SUCCESS の場合は,成功終了状態が返される。
EXIT_
FAILURE の場合は,不成功終了状態が返される。
char *getenv(const char *name);
この関数についての詳細は,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
int *system(const char *string);
system関数はコマンド・
プロセッサが使用可能であれば0以外を返し,使用可能でなければ0
を返す。実引数が空ポインタ以外の場合,返却値はコマンド・プロセッサが返した状態になり,
コマンド・プロセッサが使用可能ではない場合には0
になる。
この関数についての詳細は,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
void *bsearch(const void *key, const void *base,
size_t nmemb, size_t size, int (*compar)
(const void *, const void *));
ユーザは最初に,compar が示す関数に従って配列を昇順にソートしなければならない。
bsearch関数は
compar が示す指定の比較関数を,比較するオブジェクト(
keyオブジェクトと配列要素)を示す2つの実引数を指定して呼び出す。
比較関数は次の値を返す。
bsearch関数は配列の一致した要素へのポインタを返し,
一致する要素が見つからない場合には空ポインタを返す。
void qsort(void *base, size_t nmemb,
size_t size, int (*compar) (const void *,
const void *));
配列の内容は,compar が示す比較関数に従って昇順でソートされる。
比較関数は比較されるオブジェクトを示す2
つの実引数を指定して呼び出される。比較関数は次の値を返す。
比較した2つの要素が等しい場合には,ソートされた配列の順序は未指定になる。
qsort関数は値を返さない。
int abs(int j);
div_t div(int numer, int denom);
div関数は商と剰余を含む
div_t型の構造体を返す。
int quot; /* quotient */
int rem; /* remainder */
long int labs(long int j);
ldiv_t ldiv(long int numer, long int
denom);
div関数と類似していますが,返された構造体(
ldiv_t型)の実引数とメンバがすべて
long int型である点だけが異なる。
int mblen(const char *s, size_t n);
mblen は s
が示す多バイト文字のバイト数を数える。mblen関数は
mbtowc のシフト状態が影響を受けない点を除き,
次の関数と等価である。
mbtowc((wchar_t *)0, s, n);
s が空ポインタの場合,mblen関数は多バイト文字コード化がロケールに依存するコード化である場合には0
以外を返し,それ以外の場合には0を返す。
s が空ポインタ以外の場合,mblen関数は次の値のいずれか1
つを返す。
int mbtowc(wchar_t *pwc, const char *s, size_t
n);
mbtowc は s
が示す多バイト文字のバイト数を決める。次に,この多バイト文字に対応する
wchar_t型の値のコードを設定する(
ヌル文字に対応するコードの値は0)。多バイト文字が有効であり,
pwc が空ポインタ以外の場合には,
mbtowc は pwc
が示すオブジェクトにコードを格納する。s
が示す配列の nバイトまでが検査される。
s が空ポインタの場合,mbtowc関数は多バイト文字コード化がロケールに依存するコード化である場合には0
以外を返し,それ以外の場合には0を返す。
s が空ポインタ以外の場合,
mbtowc関数は次の値のいずれか1つを返す。
int wctomb(char *s, wchar_t wchar);
MB_CUR_
MAX文字まで格納される。wchar の値が0の場合には,
wctomb関数は初期シフト状態のままである。
s が空ポインタの場合,wctomb関数は多バイト文字コード化がロケールに依存するコード化である場合には0
以外の値を返し,それ以外の場合には0を返す。
s が空ポインタ以外の場合,
wctomb関数は次の値のいずれか1つを返す。
size_t mbstowcs(wchar_t *pwcs, const char *s,
size_t n);
mbtowc
のシフト状態が影響を受けない点以外は
mbtowc を呼び出した場合と同様に変換される。
無効な多バイト文字を検出した場合,mbstowcs関数は
(size_t) - 1 を返す。それ以外の場合には変更された配列要素の数を返すが,
終了の0コード(存在する場合)
は含まない。
size_t wcstombs(char *s, const wchar_t *pwcs,
size_t n);
各コードは,wctomb のシフト状態が影響を受けない点以外は
wctomb を呼び出した場合と同様に変換される。
有効な多バイト文字に対応しないコードを検出した場合,
wcstombs関数は
(size_t) - 1 を返す。それ以外の場合には変更されたバイト数を返すが,
終了ヌル文字(存在する場合)は含まない。
<string.h>ヘッダ・ファイルは1つの型と複数の関数を宣言し,
他のオブジェクトが文字配列として扱う文字配列を処理するために必要な1
つのマクロを定義します。
宣言される文字列関数は2種類あります。第1の関数は名前が
str で始まる関数で,文字配列を処理します。
第2の関数は名前が mem で始まる関数で,
文字配列として扱われるその他のオブジェクトを処理します。重複するオブジェクト間でコピーが行われた場合,
memmove
以外の関数の動作結果は定義されていません。
size_t
sizeof演算子の結果の符号なし汎整数型。
NULL
void *memcpy(void *s1, const void *s2, size_t
n);
void *memmove(void *s1, const void *s2, size_t
n);
memmove関数は s1 を返す。
void *memchr(const void *s, int c, size_t
n);
char へ変換される)
が最初に使用された部分を,s が示すオブジェクトの符号なし文字の先頭の
n文字で検索する。
memchr関数は検索された文字へのポインタを返し,
文字が見つからなかった場合には空ポインタを返す。
int memcmp(const void *s1, const void *s2,
size_t n);
memcmp関数は
s1 が示すオブジェクトが
s2 が示すオブジェクトより小さいか,等しいか,
または大きいかに応じて,それぞれ0より小さい,等しい,または大きい整数を返す。
void *memset(void *s, int c, size_t n);
char へ変換される)
の値を,s が示す先頭の
n文字へコピーする。関数は s を返す。
char *strcpy(char *s1, const char *s2);
strcpy関数は s1 を返す。
char *strncpy(char *s1, const char *s2, size_t
n);
strncpy関数は s1
を返す。s2 が示す文字列が
n文字より少ない場合,strncpy はコピーにヌル文字を埋め込む。
char *strcat(char *s1, const char *s2);
strcat関数は s1 を返す。
s2 の先頭文字は s1
のヌル文字を重ね書きする。
char *strncat(char *s1, const char *s2, size_t
n);
strncat関数は s1
を返す。s2 の先頭文字は
s1 のヌル文字を重ね書きする。終了ヌル文字が結果へ追加される。
int strcmp(const char *s1, const char
*s2);
strcmp関数は
s1 が示す文字列が s2
が示す文字列より小さいか,等しいか,または大きいかに応じて,
それぞれ0より小さい,等しい,または大きい整数を返す。
int strcoll(const char *s1, const char
*s2);
LC_COLLATEカテゴリに合うように解釈される。
strcoll関数は両方の文字列が現在のロケールに適切であると解釈された場合に,
s1 が示す文字列が
s2 が示す文字列より小さいか,等しいか,
または大きいかに応じて,それぞれ0より小さい,等しい,または大きい整数を返す。
int strncmp(const char *s1, const char *s2,
size_t n);
strncmp関数は s1
が示す文字列が s2 が示す文字列より小さいか,
等しいか,または大きいかに応じて,それぞれ0より小さい,
等しい,または大きい整数を返す。
size_t strxfrm(char *s1, const char *s2, size_
t n);
この関数についての詳細は,Compaq Cライブラリ・ ルーチンのマニュアルを参照すること。
char *strchr(const char *s, int c);
char へ変換される)が最初に使用された部分を,
s が示す文字列の中で検索する。
終了ヌル文字は文字列の一部とみなされる。関数は検索された文字へのポインタを返し,
文字が見つからなかった場合には空ポインタを返す。
size_t strcspn(const char *s1, const char
*s2);
strcspn関数はセグメント長を返す。
char *strpbrk(const char *s1, const char
*s2);
char *strrchr(const char *s, int c);
char に変換される)
が,s に示された文字列で使用された最後の部分を検索する。
終了ヌル文字は文字列の一部とみなされる。関数は検索された文字へのポインタを返し,
文字が見つからなかった場合には空ポインタを返す。
size_t strspn(const char *s1, const char
*s2);
strspn関数はセグメント長を返す。
char *strstr(const char *s1, const char
*s2);
strstr関数は検索された文字列へのポインタを返し,
文字列が見つからなかった場合には空ポインタを返す。
s2 が長さ0の文字列を示している場合には,
関数は s1 を返す。
char *strtok(const char *s1, char *s2);
strtok () の最初の呼出しで文字をスキップし,
s2 にない先頭文字を探す。関数は,s1
が示す文字列中で呼出しから呼出しまでの文字の位置を追跡し,
呼出しが連続的に行われると関数はこの文字列を通じて動作し,
前回の呼出しによって識別されたテキスト・トークンの後に続くテキスト・
トークンを識別する。関数は s2
中の文字と一致する文字をs1 中に見つけると,その
s1 中の文字をヌル文字に置き換える。
strtok関数はトークンの先頭文字へのポインタを返し,
トークンがない場合には空ポインタを返す。
char *strerror(int errnum);
errnum のエラー番号をエラー・メッセージ文字列にマップし,
文字列へのポインタを返す。示された文字列をプログラムで変更することはできないが,
後続の
strerror への呼出しによって重ね書きすることができる。
size_t strlen(const char *s);
<tgmath.h>ヘッダは,
<math.h>ヘッダと
<complex.h>ヘッダを含み,
いくつかの型汎用マクロを定義しています。
f (float)や l (long double)
接尾語がない,<math.h>および
<complex.h>の関数には,
対応する実数型がdoubleであるパラメータを
1つ以上持っているものがあります。
このような関数(modfを除く)には,
対応する型汎用マクロがあります。[1]
対応する実数型が関数形式内でdoubleのパラメータは,
汎用パラメータです。
このマクロを使用すると,汎用パラメータの引数で関数の実数型と
型ドメインが決定され,関数が呼び出されます。
[2]
fabs)の型汎用機能は,
本リリースでは複素数型には利用できません。
代りに,各型専用の名前(cabs,cabsf,
cabsl)を使用しなければなりません。
[2] 選択された関数のパラメータの型と引数の型が合っていない場合, その動作は未定義です。
マクロを使用すると,汎用パラメータに対応する実数型が 次の手順で決定され,その型の関数が呼び出されます。
long double型の引数がある
場合,その型はlong doubleになります。
long double型の引数がなく,汎用パラメータに
double型の引数または整数型の引数がある場合,
その型はdoubleになります。
floatになります。
<math.h>内の接尾語のない関数で,
<complex.h>)内に同じ名前に
c接頭語が付いた関数があるものには,
<math.h>内の関数と同じ名前の
型汎用マクロ(両方の関数用)があります。
fabsとcabsに対応する型汎用マクロは,
fabsです。
このような関数を,次に示します。
<math.h> <complex.h> 型汎用
関数 関数 マクロ
----------- ------------- -------------
acos cacos acos
asin casin asin
atan catan atan
acosh cacosh acosh
asinh casinh asinh
atanh catanh atanh
cos ccos cos
sin csin sin
tan ctan tan
cosh ccosh cosh
sinh csinh sinh
tanh ctanh tanh
exp cexp exp
log clog log
pow cpow pow
sqrt csqrt sqrt
fabs cabs fabs
汎用パラメータに複素数の引数が少なくとも1つあれば, マクロを使用すると,複素数関数が呼び出されます。 複素数の引数がなければ,マクロを使用すると実数関数が呼び出されます。
<math.h>内の接尾語のない関数のうち,
対応するc接頭語関数が<complex.h>にない関数には,
その関数と同じ名前の,対応する型汎用マクロがあります。
このような型汎用マクロを,次に示します。
atan2 fma llround remainder cbrt fmax log10 remquo ceil fmin log1p rint copysign fmod log2 round erf frexp logb scalbn erfc hypot lrint scalbln exp2 ilogb lround tgamma expm1 ldexp nearbyint trunc fdim lgamma nextafter floor llrint nexttoward
汎用パラメータのすべての引数が実数の場合, マクロを使用すると実数関数が呼び出されます。 実数でない引数がある場合,マクロの動作は定義されていません。
<math.h>内の関数に対応する
c接頭語付き関数ではない,
<complex.h>内の接尾語なし関数には,
その関数と同じ名前の型汎用マクロがあります。
carg conj creal cimag cproj
このマクロを実数または複素数の引数で使用すると,複素数関数が 呼び出されます。
次のような宣言があるとします。
#include <tgmath.h> int n; float f; double d; long double ld; float complex fc; double complex dc; long double complex ldc;
このような宣言があると,型汎用マクロを使用したときに呼び出される関数は, 次のとおりとなります。
使用するマクロ 呼び出し
---------------- -----------------------------
exp(n) exp(n),関数
acosh(f) acoshf(f)
sin(d) sin(d),関数
atan(ld) atanl(ld)
log(fc) clogf(fc)
sqrt(dc) csqrt(dc)
pow(ldc, f) cpowl(ldc, f)
remainder(n, n) remainder(n, n),関数
nextafter(d, f) nextafter(d, f),関数
nexttoward(f, ld) nexttowardf(f, ld)
copysign(n, ld) copysignl(n, ld)
ceil(fc) 動作は未定義
rint(dc) 動作は未定義
fmax(ldc, ld) 動作は未定義
carg(n) carg(n),関数
cproj(f) cprojf(f)
creal(d) creal(d),関数
cimag(ld) cimagl(ld)
cabs(fc) cabsf(fc)
carg(dc) carg(dc),関数
cproj(ldc) cprojl(ldc)
複素数引数を使用できる型汎用マクロでは,虚数引数も使用できます。
引数が虚数の場合,マクロはその関数に合わせて,型が実数,虚数,
または複素数の式に展開されます。
引数が虚数の場合,cos,cosh,
fabs,carg,cimag,
およびcrealの型は実数になり,
sin,tan,sinh,
tanh,asin,atan,
asinh,およびatanhの型は虚数になり,
その他の関数の型は複素数になります。
引数が虚数の場合,型汎用マクロcos,
sin,tan,cosh,
sinh,tanh,asin,
atan,asinh,atanhは,
実数関数を使って次の式で規定されます。
cos(iy) = cosh(y) sin(iy) = i sinh(y) tan(iy) = i tanh(y) cosh(iy) = cos(y) sinh(iy) = i sin(y) tanh(iy) = i tan(y) asin(iy) = i asinh(y) atan(iy) = i atanh(y) asinh(iy) = i asin(y) atanh(iy) = i atan(y)
<time.h>ヘッダ・ファイルは2つのマクロを定義し,時間と日付の情報を処理するための4
つの型と複数の関数を宣言します。
一部の関数は,時間帯により暦時間と異なることがあるローカル時間
を処理します。
size_t
sizeof演算子の結果の符号なし汎整数型。
clock_t
time_t
struct tm
int tm_sec; /* seconds after the minute -- [0,61] */
int tm_min; /* minutes after the hour -- [0,59] */
int tm_hour; /* hours since midnight -- [0,23] */
int tm_mday; /* day of the month -- [1,31] */
int tm_mon; /* months since January -- [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday -- [0,6] */
int tm_yday; /* days since January 1 -- [0,365] */
int tm_isdst; /* Daylight Saving Time flag -- 0 if */
/* DST not in effect; positive if it is; */
/* negative if information is not available. */
NULL
CLOCKS_PER_SEC
clock関数によって返される値の1秒当たりの数。
char *asctime(const struct tm *timeptr);
Sat Sep 08 08:10:32 1990\n\0
文字列へのポインタが返される。
char *ctime(const time_t *timer);
asctime関数によって生成される形式の文字列に変換する。
文字列へのポインタが返される。ctime関数は次の関数と等価である。
asctime(localtime(timer))
struct tm *gmtime(const time_t *timer);
gmtime関数は詳細時間へのポインタを返すか,
またはUTCが使用可能ではない場合には空ポインタを返す。
struct tm *localtime(const time_t *timer);
localtime関数は詳細時間へのポインタを返す。
size_t strftime(char *s, size_t maxsize, const char
*format, const struct tm *timeptr);
LC_TIMEカテゴリと,
timeptr が示す構造体に含まれている値によって決まる。
| 指定子 | 置き換える値 |
|---|---|
%a | ロケールの短縮曜日名 |
%A | ロケールの完全曜日名 |
%b
| ロケールの短縮月名 |
%B | ロケールの完全月名 |
%c |
ロケールの適切な日付と時刻表現 |
%d | 10進数としての月の日数(01 〜31) |
%H |
10進数としての時刻(24時クロック) (00〜23) |
%I | 10進数としての時刻(12 時クロック) (01〜12) |
%j
| 10進数としての年の日数(001〜366) |
%m | 10進数としての月(01 〜12) |
%M
| 10進数としての分(00〜59) |
%p | 12時クロックに関連するAM/PM 指定に対するロケールの同値 |
%S | 10進数としての秒(00〜61) |
%U |
10進数としての年の週数(最初の日曜日が1週目の1日目) (00 〜53) |
%w |
10進数としての曜日( 0[日曜日]〜6[土曜日] ) |
%W
| 10進数としての年の週数(最初の月曜日が1週目の1 日目) (00〜53) |
%x
| ロケールの適切な日付表現 |
%X | ロケールの適切な時刻表現 |
%y |
10進数としての世紀なしの年(00〜99) |
%Y | 10進数としての世紀付きの年 |
%Z | 時間帯名または短縮形, あるいは時間帯を判定できない場合には文字なし |
%% |
% |
生成された文字の合計数が,終了ヌル文字を含めて
maxsize以下の場合には,
strftime関数は s が示す配列ヘ格納された文字数を終了ヌル文字を含めずに返す。
それ以外の場合には0
が返され,配列の内容は不定になる。
clock_t clock(void);
clock関数は,
プログラムの起動に関連するイベントの発生以降にそのプログラムが使用したプロセッサ時間を返す。
時間を秒数で判断するには,返却値を
CLOCKS_PER_SECマクロの値で除算する。
プロセッサ時間を使用できないか,または表現できない場合,返される値は
(clock_t)-1 になる。
プログラムで使用した時間を測定するにはプログラムの起動時に
clock関数を呼び出し,返却値を次の呼出しの返却値から減算する。
double difftime(time_t time1, time_t
time0);
double
として秒数で表現した値で返す。
time_t mktime(struct tm *timeptr);
time関数が返した値と同じコード化で(
つまり,time_t型の値で)
返して,暦時間値に変換する。暦時間を表現できない場合には,
(time_t)-1 値が返される。
tm_wday および tm_
yday の時間構成要素の元の値は無視され,
その他の構成要素の元の値は前述の struct_
tm の説明で示した範囲に制限されない。関数が正常に完了すると
tm_wday
および tm_yday構成要素の値は適切に設定され,
その他の構成要素は指定された暦時間を表現するように設定されるが,
その値は struct_
tm の説明で示した範囲に制限される。tm_
wday の最終値は,tm_mon
および tm_year が決まるまで設定されない。
time_t time(time_t *timer);
(time_t)-1 が返される。