C言語編 リファレンス

標準ライブラリ 「B」

「B」で始まる標準ライブラリ関数及び、その他の定義です。

bool

概要 論理型。
必要なヘッダファイル stdbool.h
形式 #define bool _Bool
置換結果 「_Bool」。これは C99 で導入された型の名称。
詳細 C99 で追加された論理型 _Bool に対する代替名を提供する。 bool という名前は、C++ における論理型の標準の型名であり、それに合わせるように定義されている。
なお、このマクロを #undef で無効化したり、再び #define で定義し直したりすることが許可されている。
注意
使用例
#include <stdio.h>
#include <stdbool.h>

static void printBool(bool b)
{
	if( b ){
		puts( "true" );
	}
	else{
		puts( "false" );
	}
}

int main(void)
{
	bool a = false;
	printBool( a );

	a = !a;
	printBool( a );
	
	return 0;
}

実行結果:

false
true
関連 「真」であることを表す trueマクロ、「偽」であることを表す falseマクロがある。
本編で解説している章 第13章

bsearch関数

概要 配列から要素をサーチする。
必要なヘッダファイル stdlib.h
形式 void* bsearch(const void* key, void* base, size_t count, size_t size, int (*compar)(const void* key, const void* value));
引数 key サーチする値へのポインタ。
base サーチ対象の配列。
count サーチ対象の配列の要素数。
size 要素1つのサイズ。
compar 要素の大小関係を比較する関数へのポインタ。
この比較関数は、対象配列が昇順にソートされている場合は、 第1引数に渡された値が第2引数に渡された値よりも小さいとき 0未満の値を、同じとき 0 を、大きいとき 1以上の値を返すように定義する。 降順にソートされている場合は、小さい場合と大きい場合との値を逆転させれば良い。
比較関数に渡される実引数は、比較対象の要素へのポインタである。
戻り値 引数key に指定したポインタが指し示す値と一致する要素があれば、その要素へのポインタを返す。 存在しなければ NULL が返される。
詳細 配列base から目的の値をサーチする。要素同士の大小関係を比較するために、外部に関数を定義し、その関数へのポインタを渡す必要がある。
また、通常、バイナリサーチによって実装されることから、配列base はあらかじめソート済みにしておくことが要求される。 このために qsort関数との併用が考えられるが、ソート済みでさえあれば良いので、併用は必須ではない。
注意 比較関数の中で、引数に渡されたポインタを実際の要素の型のポインタにキャストした後、間接参照によって、要素の書き換えを行ってはならない。
使用例
#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE(array)    sizeof(array)/sizeof(array[0])

int compareInt(const void* a, const void* b);

int main(void)
{
	int table[] = { 66, 85, 70, 92, 61, 89 };
	size_t size = ARRAY_SIZE( table );
	int key = 70;
	int* result;


	qsort( table, size, sizeof(int), compareInt );
	result = bsearch( &key, table, size, sizeof(int), compareInt );
	if( result == NULL ){
		printf( "%d は含まれていません。\n", key );
	}
	else{
		printf( "%d を発見しました。\n", key );
	}

	return 0;
}

/*
	int型による順序比較。

	引数:
		a:	比較する要素。
		b:	比較する要素。
	戻り値:
		a の方が小さいとき負数、
		b の方が小さいとき 0 より大きい値、
		a と b が同じときは 0、
		 が返される。
*/
int compareInt(const void* a, const void* b)
{
	int aNum = *(int*)a;
	int bNum = *(int*)b;

	if( aNum < bNum ){
		return -1;
	}
	else if( aNum > bNum ){
		return 1;
	}
	return 0;
}

実行結果:

70 を発見しました。
関連 事前に配列をソートしておかなければならないが、ソート作業には標準関数の qsort関数が利用できる。
本編で解説している章 第37章

BUFSIZ

概要 setbuf関数に渡すバッファのサイズ。
必要なヘッダファイル stdio.h
形式 #define BUFSIZ 512
置換結果 setbuf関数に渡すバッファのサイズを表す定数。
詳細
注意
使用例
#include <stdio.h>

int main(void)
{
	char stdoutBuf[BUFSIZ];
	setbuf( stdout, stdoutBuf );

	return 0;
}

実行結果:


	
関連 setbuf関数のために用いられる定義である。
本編で解説している章 第43章

参考リンク

更新履歴

'2017/4/23 BUFSIZマクロの説明を追加。

'2017/3/11 boolマクロの説明を追加。

'2010/5/4 bsearch関数の説明を追加。

'2010/1/23 新規作成。



リファレンスのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ