C言語編 標準ライブラリのリファレンス「記号」

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

_IOFBF

概要 完全バッファリングを行うことを表す。
ヘッダ stdio.h
形式 #define _IOFBF 0
置換結果 _IOLBF_IONBF とは異なる何らかの整数値。
詳細 setvbuf関数の第3引数に指定し、完全バッファリングを行うことを表す。
注意
使用例
#include <stdio.h>

int main(void)
{
	char buf[80];
	char stdoutBuf[BUFSIZ];


	setvbuf( stdout, stdoutBuf, _IOFBF, sizeof(stdoutBuf) );

	printf( "文字列を入力して下さい" );  /* バッファに蓄えられる */
	fgets( buf, sizeof(buf), stdin );

	printf( "入力内容:%s\n", buf );  /* まだバッファにある */
	fflush( stdout );  /* バッファの内容を吐き出す */

	return 0;
}

実行結果:

abcde
文字列を入力して下さい入力内容:abcde
関連 setvbuf関数の第3引数に渡せる値として、他に _IOLBF_IONBF がある。
解説章 第43章

_IOLBF

概要 行バッファリングを行うことを表す。
ヘッダ stdio.h
形式 #define _IOLBF 1
置換結果 _IOFBF_IONBF とは異なる何らかの整数値。
詳細 setvbuf関数の第3引数に指定し、行バッファリングを行うことを表す。
注意
使用例
#include <stdio.h>

int main(void)
{
	char buf[80];
	char stdoutBuf[BUFSIZ];


	setvbuf( stdout, stdoutBuf, _IOLBF, sizeof(stdoutBuf) );

	printf( "文字列を入力して下さい\n" );  /* バッファに蓄えられる */
	fgets( buf, sizeof(buf), stdin );

	printf( "入力内容:%s\n", buf );  /* 改行を引き金に、内容が吐き出される */

	return 0;
}

実行結果:

abcde
文字列を入力して下さい
入力内容:abcde
関連 setvbuf関数の第3引数に渡せる値として、他に _IOFBF_IONBF がある。
解説章 第43章

_IONBF

概要 バッファリングを行わないことを表す。
ヘッダ stdio.h
形式 #define _IONBF 2
置換結果 _IOFBF_IOLBF とは異なる何らかの整数値。
詳細 setvbuf関数の第3引数に指定し、バッファリングを行わないことを表す。
注意
使用例
#include <stdio.h>

int main(void)
{
	char buf[80];


	setvbuf( stdout, NULL, _IONBF, 0 );

	printf( "文字列を入力して下さい\n" );  /* 即座に出力される */
	fgets( buf, sizeof(buf), stdin );

	printf( "入力内容:%s\n", buf );  /* 即座に出力される */

	return 0;
}

実行結果:

文字列を入力して下さいabcde
入力内容:abcde
関連 setvbuf関数の第3引数に渡せる値として、他に _IOFBF_IOLBF がある。
解説章 第43章

__DATE__

概要 コンパイルを行ったときの日付に置き換わる。
ヘッダ なし(事前定義マクロである)
形式
置換結果 コンパイルを行ったときの日付を表す文字列。「月 日 年」の順に並ぶ。 それぞれの隙間には、半角空白が入る。
詳細 月の表現は、asctime関数が返すものと同じ形式になる。 「月 日 年」以外の順番に変える方法は無い。
日に関して、1桁の場合には、上位桁には半角空白が埋められるため、必ず 2桁分のスペースを使う。
なお、コンパイル作業の開始から完了までに、どんなに時間が掛かったとしても、1回の作業の間、置換結果が変化することはない。
注意
使用例
#include <stdio.h>

int main(void)
{
	puts( __DATE__ );

	return 0;
}

実行結果:

Oct 11 2009
関連 日時が必要ならば __TIME__ を使う。
解説章 第29章

__FILE__

概要 ソースファイルの名称に置き換わる。
ヘッダ なし(事前定義マクロである)
形式
置換結果 ソースファイルの名前を表す文字列。
詳細
注意
使用例
#include <stdio.h>

int main(void)
{
	puts( __FILE__ );

	return 0;
}

実行結果:

main.c
関連
解説章 第29章

__LINE__

概要 ソースファイルの行数に置き換わる。
ヘッダ なし(事前定義マクロである)
形式
置換結果 ソースファイルの行数を表す文字列。
詳細
注意
使用例
#include <stdio.h>

int main(void)
{
	printf( "%d\n", __LINE__ );

	return 0;
}

実行結果:

5
関連
解説章 第29章

__STDC__

概要 コンパイラが規格に合致しているかどうか。
ヘッダ なし(事前定義マクロである)
形式
置換結果 コンパイラが、標準規格に合致していれば 1 に置換される。
詳細 コンパイラが規格以前のものであれば、恐らくこのマクロは定義されていない。 C89以降の時代のもので、非標準の場合には、定義されていない可能性も、1以外に置換される可能性もあるが、 少なくとも 1 に置換されることはないはずである。
コンパイラによっては、設定を変更することによって、標準への準拠の度合いを変えられることがある。 詳しくは、コンパイラのマニュアルを参照のこと。
注意 コンパイラが C++ に対応している場合、このマクロが定義されていない可能性がある。 これは、C言語の規格の問題ではなく、C++ の規格の問題になる。
使用例
#include <stdio.h>

int main(void)
{
#if __STDC__ == 1
	puts( "このコンパイラは規格に準拠しています。" );
#else
	puts( "このコンパイラは規格に準拠していません。" );
#endif
	
	return 0;
}

実行結果 (VisualC++):

このコンパイラは規格に準拠していません。

実行結果 (clang):

このコンパイラは規格に準拠しています。
関連 C95以降ならば、__STDC_VERSION__ を調べることで、いつの時代の規格に準拠しているか判断できる。
C99 では、__STDC_HOSTED____STDC_IEC_559____STDC_IEC_559_COMPLEX____STDC_ISO_10646__ が新たに定義されている。
解説章 第29章

__STDC_HOSTED__

概要 ホスト処理系かどうか。
ヘッダ なし(事前定義マクロである)
形式
置換結果 ホスト処理系であれば 1 に、フリースタンディング処理系であれば 0 に置換される。
詳細 ホスト処理系とは、プログラムの実行が OS の支援によって行われる環境で、C言語の規格に存在するすべての機能が使用できる。 フリースタンディング処理系は、OS の支援無しでプログラムが実行される環境で、C言語の規格に存在する機能の一部しか使用できない。
注意
使用例
#include <stdio.h>

int main(void)
{
#ifdef __STDC_HOSTED__
	printf("__STDC_HOSTED__ == %d\n", __STDC_HOSTED__);
#else
	puts("__STDC_HOSTED__ は定義されていません。");
#endif
	
	return 0;
}

実行結果 (VisualC++ 2013):

__STDC_HOSTED__ は定義されていません。

実行結果 (VisualC++ 2015/2017):

__STDC_HOSTED__ == 1

実行結果 (clang 3.7):

__STDC_HOSTED__ == 1
関連
解説章

__STDC_IEC_559__

概要 浮動小数点の実装が IEC 60559 の規格に合致しているかどうか。
ヘッダ なし(事前定義マクロである)
形式
置換結果 浮動小数点の実装が IEC 60559 の規格に合致していれば 1 に置換される。 合致していない場合は、定義されない。
詳細
注意
使用例
#include <stdio.h>

int main(void)
{
#ifdef __STDC_IEC_559__
	printf("__STDC_IEC_559__ == %d\n", __STDC_IEC_559__);
#else
	puts("__STDC_IEC_559__ は定義されていません。");
#endif
	
	return 0;
}

実行結果 (VisualC++ 2013/2015/2017):

__STDC_IEC_559__ は定義されていません。

実行結果 (clang 3.7):

__STDC_IEC_559__ は定義されていません。
関連 複素数計算の実装が、IEC 60559 の規格に合致しているかどうかは、__STDC_IEC_559_COMPLEX__ で調べることができる。
解説章

__STDC_IEC_559_COMPLEX__

概要 複素数計算の実装が IEC 60559 の規格に合致しているかどうか。
ヘッダ なし(事前定義マクロである)
形式
置換結果 複素数計算の実装が IEC 60559 の規格に合致していれば 1 に置換される。 合致していない場合は、定義されない。
詳細
注意
使用例
#include <stdio.h>

int main(void)
{
#ifdef __STDC_IEC_559_COMPLEX__
	printf("__STDC_IEC_559__ == %d\n", __STDC_IEC_559_COMPLEX__);
#else
	puts("__STDC_IEC_559_COMPLEX__ は定義されていません。");
#endif
	
	return 0;
}

実行結果 (VisualC++ 2013/2015/2017):

__STDC_IEC_559_COMPLEX__ は定義されていません。

実行結果 (clang 3.7):

__STDC_IEC_559_COMPLEX__ は定義されていません。
関連 浮動小数点の実装が、IEC 60559 の規格に合致しているかどうかは、__STDC_IEC_559__ で調べることができる。
解説章

__STDC_ISO_10646__

概要 wchar_t型の値が、ISO 10646 の規格に合致しているかどうか。
ヘッダ なし(事前定義マクロである)
形式
置換結果 wchar_t型の値が、ISO 10646 の規格に合致していれば、形式yyyymmL (y は年、m は月を表す) の long型の定数に置換される。 合致していない場合は、定義されない。
詳細 定義されている場合、wchar_t型で表すワイド文字の符号化が、 置換結果によって表現される日付までに行われた補足や訂正に適合していることを表す。
注意
使用例
#include <stdio.h>

int main(void)
{
#ifdef __STDC_ISO_10646__
	printf("__STDC_IEC_559__ == %d\n", __STDC_ISO_10646__);
#else
	puts("__STDC_ISO_10646__ は定義されていません。");
#endif
	
	return 0;
}

実行結果 (VisualC++ 2013/2015/2017):

__STDC_ISO_10646__ は定義されていません。

実行結果 (clang 3.7):

__STDC_ISO_10646__ は定義されていません。
関連
解説章

__STDC_VERSION__

概要 コンパイラの対応している規格のバージョンを表す。
ヘッダ なし(事前定義マクロである)
形式
置換結果 C95規格に合致していれば 199409L に、C99規格に合致していれば 199901L になる。 C95 よりも以前の環境、あるいは規格に合致していない環境では、恐らく定義されていない。
詳細 __STDC__ との組み合わせによって、標準のどの規格に合致しているかを調べられる。
コンパイラによっては、設定を変更することによって、標準への準拠の度合いを変えられることがある。 詳しくは、コンパイラのマニュアルを参照のこと。
注意
使用例
#include <stdio.h>

int main(void)
{
#ifdef __STDC__
	#ifdef __STDC_VERSION__
		#if __STDC_VERSION__ == 199901L
			puts( "C99 に合致しています。" );
		#elif __STDC_VERSION__ == 199409L
			puts( "C95 に合致しています。" );
		#else
			puts( "不明な結果です。" );
		#endif
	#else
		puts( "C89 に合致しています。" );
	#endif
#else
	puts( "規格に合致していません。" );
#endif
	
	return 0;
}

実行結果:

規格に合致していません。
関連
解説章 第29章

__TIME__

概要 コンパイルを行ったときの日時に置き換わる。
ヘッダ なし(事前定義マクロである)
形式
置換結果 コンパイルを行ったときの日時を表す文字列。「時:分:秒」の順に並ぶ。
詳細 表現は、asctime関数が返すものと同じ形式になる。
なお、コンパイル作業の開始から完了までに、どんなに時間が掛かったとしても、1回の作業の間、置換結果が変化することはない。
注意
使用例
#include <stdio.h>

int main(void)
{
	puts( __TIME__ );

	return 0;
}

実行結果:

15:57:58
関連 日付が必要ならば __DATE__ を使う。
解説章 第29章

__VA_ARGS__

概要 関数形式マクロの可変個引数を表す。
ヘッダ なし(事前定義マクロである)
形式
置換結果 関数形式マクロの可変個部分の実引数の並び。
詳細
注意
使用例
#include <stdio.h>

#define DEBUG

#ifdef DEBUG
#define PRINT(...)  fprintf(stderr, __VA_ARGS__)
#else
#define PRINT(...)  printf(__VA_ARGS__)
#endif

int main(void)
{
	const char* s = "abc";
	int n = 123;

	PRINT( "%d\n", n );
	PRINT( "%s %d\n", s, n );

	return 0;
}

実行結果

123
abc 123
関連
解説章 第52章

参考リンク

Cクイックリファレンス 第2版
 -- C11対応のリファレンス。
S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル 第5版
 -- C99 まで網羅した最も詳細なリファレンス。
新ANSI C言語辞典
 -- 標準ライブラリについて詳しい。C99 には非対応。

更新履歴

'2017/5/19 __VA_ARGS__ の説明を追加。

'2017/4/13 __STDC_HOSTED__、__STDC_IEC_559__、__STDC_IEC_559_COMPLEX__、__STDC_ISO_10646__ の説明を追加。

'2013/4/14 __STDC_VERSION__ の説明を追加。

'2010/9/2 _IOFBF、_IOLBF、_IONBF の説明を追加。

'2009/10/11 __DATE__、__FILE__、__LINE__、__STDC__、__TIME__ の説明を追加。

'2009/9/12 新規作成。



標準ライブラリのリファレンスのトップページへ

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

Programming Place Plus のトップページへ