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
が返される。