C言語編 リファレンス

標準ライブラリ 「C」

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

calloc関数

概要 メモリ領域を割り当てる(アロケートする)。
必要なヘッダファイル stdlib.h
形式 void* calloc(size_t n, size_t size);
引数 n アロケートする区画の個数。
0 を指定した場合の動作は環境依存。
size アロケートする領域の大きさをバイト単位で指定する。
0 を指定した場合の動作は環境依存。
戻り値 アロケートされた領域の先頭を指すポインタ。 メモリ不足などの要因で失敗した場合には、NULL が返される。
詳細 アロケートされた領域は、0 で初期化される。
アロケートされた領域が不要になったら、free関数で解放(システムへ返却)することができる。
システムがメモリ領域を管理するための追加の領域が必要なため、実際に割り当てられる大きさは、size を超える可能性がある。
ちなみに、calloc の 'c' は Cell(区画)から来ている。
注意 割り当てられた領域は 0 で初期化されているが、全ての型にとって、0 が初期値として適切であるとは限らない。 例えば、浮動小数点数において、0 というビットが並んだ状態が、0.0 を表現しているかどうかは環境依存である。
使用例
#include <stdio.h>
#include <stdlib.h>

#define ALLOCATE_SIZE	(10)

int main(void)
{
	int* values;
	int i;
	
	values = calloc( ALLOCATE_NUM, sizeof(int) );
	if( values == NULL ){
		exit( EXIT_FAILURE );
	}

	for( i = 0; i < ALLOCATE_NUM; ++i ){
		printf( "%d ", values[i] );
	}
	printf( "\n" );

	for( i = 0; i < ALLOCATE_NUM; ++i ){
		values[i] = i;
	}

	for( i = 0; i < ALLOCATE_NUM; ++i ){
		printf( "%d ", values[i] );
	}
	printf( "\n" );

	free( values );

	return 0;
}

実行結果:

0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
関連 realloc関数は領域の再割り当てを行う。 また、より一般的な動的メモリ割り当て関数として、malloc関数がある。
本編で解説している章 第34章

cbrt関数

概要 立方根を求める。
必要なヘッダファイル math.h
形式 double cbrt(double x);
引数 x 対象の値。
戻り値 引数x の立方根。
詳細
注意
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	printf( "%f\n", cbrt(27.0) );
	printf( "%f\n", cbrt(-1000.0) );
	printf( "%f\n", cbrt(0.0) );

	return 0;
}

実行結果

3.000000
-10.000000
0.000000
関連 float型版の cbrtf関数、long double型版の cbrtl関数がある。
平方根を求めるには、sqrt関数を使う。
本編で解説している章

cbrtf関数

概要 立方根を求める。
必要なヘッダファイル math.h
形式 float cbrtf(float x);
引数 x 対象の値。
戻り値 引数x の立方根。
詳細
注意
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	printf( "%f\n", cbrtf(27.0f) );
	printf( "%f\n", cbrtf(-1000.0f) );
	printf( "%f\n", cbrtf(0.0f) );

	return 0;
}

実行結果

3.000000
-10.000000
0.000000
関連 double型版の cbrt関数、long double型版の cbrtl関数がある。
平方根を求めるには、sqrtf関数を使う。
本編で解説している章

cbrtl関数

概要 立方根を求める。
必要なヘッダファイル math.h
形式 long double cbrtl(long double x);
引数 x 対象の値。
戻り値 引数x の立方根。
詳細
注意
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	printf( "%Lf\n", cbrtl(27.0L) );
	printf( "%Lf\n", cbrtl(-1000.0L) );
	printf( "%Lf\n", cbrtl(0.0L) );

	return 0;
}

実行結果

3.000000
-10.000000
0.000000
関連 float型版の cbrtf関数、double型版の cbrt関数がある。
平方根を求めるには、sqrtl関数を使う。
本編で解説している章

ceil関数

概要 小数点以下を切り上げる。
必要なヘッダファイル math.h
形式 double ceil(double x);
引数 x 対象の浮動小数点数。
戻り値 引数x 以上で、かつ、最も小さい整数。
詳細 返す結果は整数であるが、その型は double型である。 なお、ceil は ceiling(天井)という意味。
注意
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	printf( "%f\n", ceil(3.25) );
	printf( "%f\n", ceil(-3.25) );
	printf( "%f\n", ceil(0.0) );

	return 0;
}

実行結果:

4.000000
-3.000000
0.000000
関連 反対に、小数点以下を切り捨てる関数は floor関数である。
C99 には、float型バージョンの ceilf関数と、long double型バージョンの ceill関数がある。
本編で解説している章 第21章

ceilf関数

概要 小数点以下を切り上げる。
必要なヘッダファイル math.h
形式 float ceilf(float x);
引数 x 対象の浮動小数点数。
戻り値 引数x 以上で、かつ、最も小さい整数。
詳細 返す結果は整数であるが、その型は float型である。 なお、ceil は ceiling(天井)という意味。
注意
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	printf( "%f\n", ceilf(3.25f) );
	printf( "%f\n", ceilf(-3.25f) );
	printf( "%f\n", ceilf(0.0f) );

	return 0;
}

実行結果:

4.000000
-3.000000
0.000000
関連 double型を対象にした ceil関数、long double型を対象とした ceill関数がある。
なお、反対に、小数点以下を切り捨てる関数は floorf関数である。
本編で解説している章 第21章

ceill関数

概要 小数点以下を切り上げる。
必要なヘッダファイル math.h
形式 long double ceill(long double x);
引数 x 対象の浮動小数点数。
戻り値 引数x 以上で、かつ、最も小さい整数。
詳細 返す結果は整数であるが、その型は long double型である。 なお、ceil は ceiling(天井)という意味。
注意
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	printf( "%Lf\n", ceill(3.25L) );
	printf( "%Lf\n", ceill(-3.25L) );
	printf( "%Lf\n", ceill(0.0L) );

	return 0;
}

実行結果:

4.000000
-3.000000
0.000000
関連 float型を対象にした ceilf関数、double型を対象にした ceil関数がある。
なお、反対に、小数点以下を切り捨てる関数は floorl関数である。
本編で解説している章 第21章

CHAR_BIT

概要 char型のビット数を表す。
必要なヘッダファイル limits.h
形式 #define CHAR_BIT 8
置換結果 char型のビット数。最低でも 8 であり、具体的な値は環境依存。
詳細 char型のサイズは 1Byte と定められているが、1Byte が何bit かは環境依存である。 このマクロは、1Byte の bit数を表しているが、それはすなわち char型が何bit であるかと同義である。
注意
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "char: %dbit\n", CHAR_BIT );
	printf( "long: %dbit\n", CHAR_BIT * (int)sizeof(long) );

	return 0;
}

実行結果:

char: 8bit
long: 32bit
関連
本編で解説している章 第20章

CHAR_MAX

概要 char型の最大値を表す。
必要なヘッダファイル limits.h
形式 #define CHAR_MAX SCHAR_MAX
または
#define CHAR_MAX UCHAR_MAX
置換結果 char型で表現可能な最大値。
詳細 char型の符号の有無は環境依存である。 符号付きであれば置換結果は SCHAR_MAX に、符号無しであれば UCHAR_MAX と等しい。
注意
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	if( CHAR_MAX == SCHAR_MAX ){
		puts( "char型は符号あり" );
	}
	else{
		puts( "char型は符号なし" );
	}

	return 0;
}

実行結果:

char型は符号あり
関連 char型の最小値は CHAR_MIN で表される。
本編で解説している章 第20章

CHAR_MIN

概要 char型の最小値を表す。
必要なヘッダファイル limits.h
形式 #define CHAR_MIN SCHAR_MIN
または
#define CHAR_MAX 0
置換結果 char型で表現可能な最小値。
詳細 char型の符号の有無は環境依存である。 符号付きであれば置換結果は SCHAR_MIN に等しく、符号無しであれば 0 である。 なお、UCHAR_MIN という定義は存在しない。
注意
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	if( CHAR_MIN == SCHAR_MIN ){
		puts( "char型は符号あり" );
	}
	else{
		puts( "char型は符号なし" );
	}

	return 0;
}

実行結果:

char型は符号あり
関連 char型の最大値は CHAR_MAX で表される。
本編で解説している章 第20章

clearerr関数

概要 エラー値を初期化する。
必要なヘッダファイル stdio.h
形式 void clearerr(FILE* stream);
引数 stream 対象のストリーム。
戻り値
詳細 引数stream のファイル終了指示子と、ファイルエラー指示子を初期化する。
前者は feof関数が真を返す状況、後者は ferror関数が真を返す状況を表すフラグであり、 clearerr関数を呼び出した後は、この2つの関数は偽を返すようになる。
注意
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	FILE* fp;
	int c;

	fp = fopen( "test.txt", "r" );
	if( fp == NULL ){
		exit( EXIT_FAILURE );
	}

	while( 1 ){
		c = fgetc( fp );
		if( feof(fp) ){
			break;
		}
		else if( ferror(fp) ){
			/* エラーが発生したら、初期化して先頭へ戻る */
			puts( "File Read Error" );
			clearerr( fp );
			rewind( fp );
		}
		printf( "%c", c );
	}

	if( fclose( fp ) == EOF ){
		fputs( "ファイルクローズに失敗しました。\n", stderr );
		exit( EXIT_FAILURE );
	}

	return 0;
}

実行結果:

test message
関連
本編で解説している章

clock関数

概要 使用したプロセッサ時間を取得する。
必要なヘッダファイル time.h
形式 clock_t clock(void);
引数 なし
戻り値 使用したプロセッサ時間。 取得できなかった場合は、-1 を clock_t型でキャストした値が返される。
詳細 実行中のプログラムが、起動されてから現在に至るまでに使用したプロセッサ時間を取得する。 途中で他のプログラムに割り込まれた場合、その間に経過した時間は含まれないのが普通である。
返される値は、環境に応じて異なる単位であり、CLOCKS_PER_SECマクロの値で割ることによって、秒単位に変換できる。
注意 取得できる値は環境によって異なる精度である。 また、実際に取得できる精度よりも細かい単位で結果を返す環境もあり得る。 例えば、実際には 1ms の精度しか取得できなくても、1μs 単位で返すかも知れない。
clock_t型は、何らかの算術型を typedef したものであり、やはり環境によって異なる。 この型の大きさによっては、表現できるプロセッサ時間の範囲が非常に狭いかも知れない。
使用例
#include <stdio.h>
#include <time.h>

int main(void)
{
	clock_t begin, end;
	int i;

	begin = clock();
	for( i = 0; i < 10000000; ++i ){
	}
	end = clock();

	printf( "result: %f seconds\n", (double)(end - begin) / CLOCKS_PER_SEC ); 
	
	return 0;
}

実行結果:

result: 0.026000 seconds
関連
本編で解説している章 第51章

CLOCKS_PER_SEC

概要 1秒当たりのプロセッサ時間。
必要なヘッダファイル time.h
形式 #define CLOCKS_PER_SEC 1000
置換結果 環境によって異なる。
詳細 clock関数が返したプロセッサ時間を、 このマクロの置換結果で割ることによって、秒単位に変換できる。
注意
使用例
#include <stdio.h>
#include <time.h>

int main(void)
{
	clock_t begin, end;
	int i;

	begin = clock();
	for( i = 0; i < 10000000; ++i ){
	}
	end = clock();

	printf( "result: %f seconds\n", (double)(end - begin) / CLOCKS_PER_SEC ); 
	
	return 0;
}

実行結果:

result: 0.026000 seconds
関連
本編で解説している章 第51章

cos関数

概要 余弦を計算する。
必要なヘッダファイル math.h
形式 double cos(double x);
引数 x 求める角のラジアン値。
戻り値 引数x を角θのラジアン値としたときの余弦。
詳細 いわゆる三角関数のコサインを求める関数である。
注意 実装方法によるが、誤差の度合いや、誤差の生まれ方の特徴は異なるので、許容できるかどうかはよく調べる必要がある。
使用例
#include <stdio.h>
#include <math.h>

#define DEG_TO_RAD(deg)  ((deg) / 180.0 * 3.14159265358979323846)  /* 度からラジアンへの変換 */

int main(void)
{
	double deg = -180.0;
	int i;

	for( i = 0; i <= 8; ++i ){
		printf( "cos(%.1f) = %f\n", deg, cos(DEG_TO_RAD(deg)) );
		deg += 45.0;
	}

	return 0;
}

実行結果:

cos(-180.0) = -1.000000
cos(-135.0) = -0.707107
cos(-90.0) = 0.000000
cos(-45.0) = 0.707107
cos(0.0) = 1.000000
cos(45.0) = 0.707107
cos(90.0) = 0.000000
cos(135.0) = -0.707107
cos(180.0) = -1.000000
関連 正弦は sin関数、正接は tan関数で求められる。
また、逆余弦を acos関数で求められる。
C99 においては、float型版の cosf関数、long double型版の cosl関数が存在する。
本編で解説している章

cosf関数

概要 余弦を計算する。
必要なヘッダファイル math.h
形式 float cosf(float x);
引数 x 求める角のラジアン値。
戻り値 引数x を角θのラジアン値としたときの余弦。
詳細 いわゆる三角関数のコサインを求める関数である。
注意 実装方法によるが、誤差の度合いや、誤差の生まれ方の特徴は異なるので、許容できるかどうかはよく調べる必要がある。
使用例
#include <stdio.h>
#include <math.h>

#define DEG_TO_RAD(deg)  ((deg) / 180.0 * 3.14159265358979323846)  /* 度からラジアンへの変換 */

int main(void)
{
	float deg = -180.0f;
	int i;

	for( i = 0; i <= 8; ++i ){
		printf( "cos(%.1f) = %f\n", deg, cosf((float)DEG_TO_RAD(deg)) );
		deg += 45.0f;
	}

	return 0;
}

実行結果:

cos(-180.0) = -1.000000
cos(-135.0) = -0.707107
cos(-90.0) = 0.000000
cos(-45.0) = 0.707107
cos(0.0) = 1.000000
cos(45.0) = 0.707107
cos(90.0) = 0.000000
cos(135.0) = -0.707107
cos(180.0) = -1.000000
関連 double型版の cos関数、long double型版の cosl関数が存在する。
正弦は sinf関数、正接は tanf関数で、 逆余弦は acosf関数で求められる。
本編で解説している章

cosl関数

概要 余弦を計算する。
必要なヘッダファイル math.h
形式 long double cosf(long double x);
引数 x 求める角のラジアン値。
戻り値 引数x を角θのラジアン値としたときの余弦。
詳細 いわゆる三角関数のコサインを求める関数である。
注意 実装方法によるが、誤差の度合いや、誤差の生まれ方の特徴は異なるので、許容できるかどうかはよく調べる必要がある。
使用例
#include <stdio.h>
#include <math.h>

#define DEG_TO_RAD(deg)  ((deg) / 180.0 * 3.14159265358979323846)  /* 度からラジアンへの変換 */

int main(void)
{
	long double deg = -180.0L;
	int i;

	for( i = 0; i <= 8; ++i ){
		printf( "cos(%.1Lf) = %Lf\n", deg, cosl(DEG_TO_RAD(deg)) );
		deg += 45.0L;
	}

	return 0;
}

実行結果:

cos(-180.0) = -1.000000
cos(-135.0) = -0.707107
cos(-90.0) = 0.000000
cos(-45.0) = 0.707107
cos(0.0) = 1.000000
cos(45.0) = 0.707107
cos(90.0) = 0.000000
cos(135.0) = -0.707107
cos(180.0) = -1.000000
関連 float型版の cosf関数、long double型版の cosl関数が存在する。
正弦は sinl関数、正接は tanl関数で、 逆余弦は acosl関数で求められる。
本編で解説している章

ctime関数

概要 カレンダー時間を文字列化する。
必要なヘッダファイル time.h
形式 char* ctime(const time_t* timer);
引数 timer カレンダー時間が格納されたアドレス。
戻り値 引数timer が指すカレンダー時間を、文字列化した配列のアドレス。
詳細 この関数がしていることは、次と同じである。
return asctime( localtime(timer) );
注意 戻り値が返すアドレスは、標準ライブラリ内のどこかにある配列のものであり、 この配列は他の関数の呼び出しによって上書きされることがある。 具体的には、次回の asctime関数や ctime関数の呼び出し時に上書きされる可能性がある。 そのため、あとで結果を使う場合は、コピーを取っておくべきである。
使用例
#include <stdio.h>
#include <time.h>

int main(void)
{
	time_t t;
	
	t = time( NULL );
	puts( ctime(&t) );
	
	return 0;
}

実行結果:

Sun Apr 03 13:07:27 2011
関連 変換前の形式が tm構造体である場合は、asctime関数を使える。
本編で解説している章 第51章

参考リンク

更新履歴

'2017/4/14 cbrt関数、cbrtf関数、cbrtl関数を追加。

'2017/3/10 cosf関数、cosl関数の説明を追加。

'2017/3/6 ceilf関数、ceilf関数の説明を追加。

'2015/8/29 サンプルプログラム中で、flose関数の戻り値をチェックするようにした。

'2011/4/9 clock関数、CLOCKS_PER_SEC、ctime関数の説明を追加。

'2010/6/16 clearerr関数の説明を追加。

'2010/5/8 cos関数の説明を追加。

'2010/4/3 calloc関数の説明を追加。

'2009/9/19 CHAR_BIT、CHAR_MAX、CHAR_MIN の説明を追加。

'2009/8/29 ceil関数の説明を追加。

'2009/7/4 新規作成。



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

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

Programming Place Plus のトップページへ