HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
バイナリ検索を実行します。ソートされたオブジェクトの配列から指定のオブジェクトを検索します。
#include <stdlib.h>関数バリアント bsearch関数には, _bsearch32および _bsearch64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。void *bsearch (const void *key, const void *base, size_t nmemb, size_t size, int (*compar)
(const void *, const void *));
key
配列内で検索するオブジェクトを指すポインタ。このポインタは,pointer-to-object 型で,pointer-to-void 型にキャストされなければなりません。base
配列の最初のメンバを指すポインタ。このポインタは pointer-to-object 型で,pointer-to-void 型にキャストされなければなりません。nmemb
配列内のオブジェクトの数。size
オブジェクトのサイズ (バイト数)。compar
比較関数を指すポインタ。
配列はまず,compar によって示される比較関数に従って,昇順にソートする必要があります。compar によって示される比較関数に 2 つの引数が渡されます。 2 つの引数は比較するオブジェクトを示します。最初の引数が 2 番目の引数より小さいか,等しいか,大きいかに応じて,比較関数は 0 より小さい整数,0,0 より大きい引数を返さなければなりません。
比較関数 (compar) が配列内のすべてのバイトを比較する必要はありません。したがって,配列内のオブジェクトには,比較するデータの他に任意のデータを格納することができます。
返される値は pointer-to-void 型として宣言されるため, pointer-to-object 型にキャストされるかまたは割り当てられなければなりません。
x 配列内で一致するメンバを指すポインタ。一致するメンバが見つからない場合はヌル・ポインタ。 NULL キーが配列から見つからなかったことを示します。
#include <stdio.h> #include <stdlib.h> #define SSIZE 30 extern int compare(); /* prototype for comparison function */ int array[SSIZE] = {30, 1, 29, 2, 28, 3, 27, 4, 26, 5, 24, 6, 23, 7, 22, 8, 21, 9, 20, 10, 19, 11, 18, 12, 17, 13, 16, 14, 15, 25}; /* This program takes an unsorted array, sorts it using qsort, */ /* and then calls bsearch for each element in the array, */ /* making sure that bsearch returns the correct element. */ main() { int i; int failure = FALSE; int *rkey; qsort(array, SSIZE, sizeof (array[0]), &compare); /* search for each element */ for (i = 0; i < SSIZE - 1; i++) { /* search array element i */ rkey = bsearch((array + i), array, SSIZE, sizeof(array[0]), &compare); /* check for successful search */ if (&array[i] != rkey) { printf("Not in array, array element %d\n", i); failure = TRUE; break; } } if (!failure) printf("All elements successfully found!\n"); } /* Simple comparison routine. */ /* */ /* Returns: = 0 if a == b */ /* < 0 if a < b */ /* > 0 if a > b */ int compare(int *a, int *b) { return (*a - *b); }
このサンプル・プログラムでは,次の出力が生成されます。
All elements successfully found!
初期シフト状態で 1 バイトのマルチバイト文字をワイド文字に変換します。
#include <wchar.h>wint_t btowc (int c);
c
ワイド文字表現に変換する文字。
btowc関数は, ( unsigned char)c が初期シフト状態で有効な 1 バイトのマルチバイト文字であるかどうかを確認し,有効である場合は,その文字のワイド文字表現を返します。
x unsigned char c のワイド文字表現。 WEOF エラーを示します。 c 引数の値が EOF であるか,または初期シフト状態で有効な 1 バイトのマルチバイト文字でありません。
ヌル文字をバイト列にコピーします。
#include <strings.h>void bzero (void *string, size_t length);
string
ヌル文字のコピー先のバイト列を指定します。length
文字列の長さ (バイト数) を指定します。
bzero関数は,ヌル文字 ('\0') を length バイトだけ, string によって示されるバイト列にコピーします。 length が 0 の場合は,バイトはコピーされません。
複素数の絶対値を返します。
#include <math.h>double cabs (cabs_t z);
float cabsf (cabsf_t z); (Alpha, I64)
long double cabsl (cabsl_t z); (Alpha, I64)
z
cabs_t型, cabsf_t型,または cabsl_t型の構造体。これらの型は次に示すように, <math.h>ヘッダ・ファイルに定義されています。
typedef struct {double x,y;} cabs_t; typedef struct { float x, y; } cabsf_t; (Alpha, I64) typedef struct { long double x, y; } cabsl_t; (Alpha, I64)
cabs関数は, 2 点間のユークリッド距離をそれぞれの 2 乗の平方根として計算することにより,複素数の絶対値を返します。
sqrt(x2 + y2)
オーバフローが発生した場合,戻り値は未定義です。
cabs関数, cabsf関数, cabsl関数はそれぞれ, hypot関数, hypotf関数, hypotl関数と同じです。
引数 (複素数) の逆余弦を返します。
#include <complex.h>double complex cacos (double complex z);
float complex cacosf (float complex z);
long double complex cacosl (long double complex z);
z
複素数値。
cacos関数は,実軸上の区間 [ - 1, +1] の外側に分岐線法を適用して,複素数 z の逆余弦を計算します。
n 複素数の逆余弦値。この値は,虚軸上では数学的に無限の範囲,また実軸上では区間 [0, π] の範囲からなる帯状の領域にあります。
引数 (複素数) の双曲線逆余弦を返します。
#include <complex.h>double complex cacosh (double complex z);
float complex cacoshf (float complex z);
long double complex cacoshl (long double complex z);
z
複素数値。
cacosh関数は,実軸上の 1 より小さい値に分岐線法を適用して,複素数 z の双曲線逆余弦を計算します。
n 複素数の双曲線逆余弦値。この値は,実軸上では値が負でない範囲,また虚軸上では区間 [ - iπ, +iπ] の範囲からなる帯状の領域にあります。
0 に初期化されたメモリ領域を割り当てます。この関数は AST リエントラントです。
#include <stdlib.h>関数バリアント calloc関数には, _calloc32および _calloc64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。void *calloc (size_t number, size_t size);
number
割り当てる項目の数。size
各項目のサイズ。
calloc関数は項目を 0 に初期化します。mallocと reallocも参照してください。
x クォドワード境界 (Alpha only) またはオクタワード境界 (I64 only) にそろえられた最初のバイトのアドレス。 NULL 領域を割り当てることができないことを示します。
引数 (複素数) の位相角を返します。
#include <complex.h>double carg (double complex z);
float cargf (float complex z);
long double cargl (long double complex z);
z
複素数値。
carg関数は,実軸上の負の領域に分岐線法を適用して, z の位相角 (偏角ともいいます) を計算します。
n z の位相角値。この値は区間 [ - π, +π] の範囲にあります。
引数 (複素数) の逆正弦を返します。
#include <complex.h>double complex casin (double complex z);
float complex casinf (float complex z);
long double complex casinl (long double complex z);
z
複素数値。
casin関数は,実軸上の区間 [ - 1, +1] の外側に分岐線法を適用して,複素数 z の逆正弦を計算します。
n 複素数の逆正弦値。この値は,虚軸では数学的に無限の範囲,また実軸上では区間 [-π/2, +π/2] の範囲からなる帯状の領域にあります。
引数 (複素数) の双曲線逆正弦を返します。
#include <complex.h>double complex casinh (double complex z);
float complex casinhf (float complex z);
long double complex casinhl (long double complex z);
z
複素数値。
casinh関数は,虚軸上の区間 [ - i, +i] の外側に分岐線法を適用して,複素数 z の双曲線逆正弦を計算します。
n 複素数の双曲線逆正弦値。この値は,実軸上では数学的に無限の範囲,また虚軸上では区間 [ - iπ/2, +iπ/2] の範囲からなる帯状の領域にあります。
引数 (複素数) の逆正接を返します。
#include <complex.h>double complex catan (double complex z);
float complex catanf (float complex z);
long double complex catanl (long double complex z);
z
複素数値。
catan関数は,虚軸上の区間 [ - i, +i] の外側に分岐線法を適用して,複素数 z の逆正接を計算します。
n 複素数の逆正接値。この値は,虚軸上では数学的に無限の範囲,また実軸上では区間 [-π/2, +π/2] の範囲からなる帯状の領域にあります。
引数 (複素数) の双曲線逆正接を返します。
#include <complex.h>double complex catanh (double complex z);
float complex catanhf (float complex z);
long double complex catanhl (long double complex z);
z
複素数値。
catanh関数は,虚軸上の区間 [ - 1, +1] の外側に分岐線法を適用して,複素数 z の双曲線逆正接を計算します。
n 複素数の双曲線逆正接値。この値は,実軸上では数学的に無限の範囲,また虚軸上では区間 [ - iπ/2, +iπ/2] の範囲からなる帯状の領域にあります。
メッセージ・カタログをクローズします。
#include <nl_types.h>int catclose (nl_catd catd);
catd
メッセージ・カタログ記述子。この記述子は, catopen の呼び出しが正常終了したときに返されます。
catclose関数は,catd によって参照されるメッセージ・カタログをクローズし,カタログ・ファイル記述子の割り当てを解除します。
0 カタログが正しくクローズされたことを示します。 - 1 エラーが発生したことを示します。 errno は次の値に設定されます。
- EBADF---カタログ記述子が不正です。
メッセージ・カタログからメッセージを取得します。
#include <nl_types.h>関数バリアント catgets関数には, _catgets32および _catgets64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *catgets (nl_catd catd, int set_id, int msg_id, const char *s);
catd
メッセージ・カタログ記述子。この記述子は, catopen の呼び出しが正常終了したときに返されます。set_id
整数のセット識別子。msg_id
整数のメッセージ識別子。s
メッセージを取得できないときに関数から返されるデフォルトのメッセージ文字列を指すポインタ。
catgets関数は,メッセージ・カタログ catd から, set_id と msg_id によって示されるメッセージを取得します。メッセージは nl_catd構造体のメッセージ・バッファに格納されます。 catgets を再び呼び出すと,格納されているメッセージは上書きされます。メッセージ文字列を保存する必要がある場合は,プログラムで別の場所にコピーしてください。
x 取得したメッセージを指すポインタ。 s デフォルト・メッセージ文字列を指すポインタ。関数が要求されたメッセージをカタログから取得できなかったことを示します。指定された引数の組み合わせ ( set_d, msg_id) がオープンされているカタログで既存のメッセージを表さない場合は,この条件が発生することがあります。また,エラーが発生したことを示す場合もあります。エラーが発生した場合は,この関数は errno を次のいずれかの値に設定します。
- EBADF---カタログ記述子が不正です。
- EVMSRR---OpenVMS I/O 読み込みエラー。 OpenVMS エラー・コードは vaxc$errno に格納されています。
#include <nl_types.h> #include <locale.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <unixio.h> /* This test makes use of all the message catalog routines. catopen */ /* opens the catalog ready for reading, then each of the three */ /* messages in the catalog are extracted in turn using catgets and */ /* printed out. catclose closes the catalog after use. */ /* The catalog source file used to create the catalog is as follows: */ /* $ This is a message file * $ * $quote " * $ another comment line * $set 1 * 1 "First set, first message" * 2 "second message - This long message uses a backslash \ * for continuation." * $set 2 * 1 "Second set, first message" */ char *default_msg = "this is the first message."; main() { nl_catd catalog; int msg1, msg2, retval; char *cat = "sys$disk:[]catgets_example.cat"; /*Force local catalog*/ char *msgtxt; char string[128]; /* Create the message test catalog */ system("gencat catgets_example.msgx catgets_example.cat") ; if ((catalog = catopen(cat, 0)) == (nl_catd) - 1) { perror("catopen"); exit(EXIT_FAILURE); } msgtxt = catgets(catalog, 1, 1, default_msg); printf("%s\n", msgtxt); msgtxt = catgets(catalog, 1, 2, default_msg); printf("%s\n", msgtxt); msgtxt = catgets(catalog, 2, 1, default_msg); printf("%s\n", msgtxt); if ((retval = catclose(catalog)) == -1) { perror("catclose"); exit(EXIT_FAILURE); } delete("catgets_example.cat;") ; /* Remove the test catalog */ }
このサンプル・プログラムを実行すると,次の結果が生成されます。
First set, first message second message - This long message uses a backslash for continuation. Second set, first message
| 前へ | 次へ | 目次 | 索引 |