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

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

UCHAR_MAX

概要 unsigned char型で表現可能な最大の数。
ヘッダ limits.h
形式 #define UCHAR_MAX 255
置換結果 unsigned char型で表現可能な最大の数。
詳細
注意
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%u\n", UCHAR_MAX );

	return 0;
}

実行結果:

255
関連 UCHAR_MIN は、unsigned で表現できる最小値は常に 0 であることから、存在しない。
解説章 第20章

UINTMAX_C

概要 uintmax_t型の定数に展開される。
ヘッダ stdint.h
形式 #define UINTMAX_C(value) (value ## ULL)
引数 value 定数値。
置換結果 引数value を、uintmax_t型の定数値に展開したもの。
詳細 引数value は、10進数、8進数、16進数のいずれかの定数でなければならない。
注意
使用例
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
	uintmax_t a = UINTMAX_C(1000);
	printf( PRIuMAX "\n", a );

	return 0;
}

実行結果:

1000
関連
解説章

UINTMAX_MAX

概要 uintmax_t型の最大値を表す。
ヘッダ stdint.h
形式 #define UINTMAX_MAX 18446744073709551615
置換結果 uintmax_t型で表現可能な最大値。
詳細
注意
使用例
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
	printf( "%" PRIuMAX "\n", UINTMAX_MAX );

	return 0;
}

実行結果:

18446744073709551615
関連
解説章

UINT_MAX

概要 unsigned int型で表現可能な最大の数。
ヘッダ limits.h
形式 #define UINT_MAX 4294967295
置換結果 unsigned int型で表現可能な最大の数。
詳細
注意 int型の大きさはコンパイラ依存であり、上記の形式は int型が 32bit の環境の場合である。
ただし、16bit未満であることはあり得ない。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%u\n", UINT_MAX );

	return 0;
}

実行結果:

4294967295
関連 UINT_MIN は、unsigned で表現できる最小値は常に 0 であることから、存在しない。
解説章 第20章

uintmax_t

概要 符号無しの最大整数型。
ヘッダ stdint.h
形式 typedef unsigned long long int uintmax_t;
詳細 コンパイラが対応している最もサイズの大きい符号無し整数型。 unsigned long long int のような標準の型よりも大きい可能性もあるため、コード内に定数値を記述する際には、 UINTMAX_Cマクロを使い、uintmax_t型の値を返してもらうようにする。
注意 この型の大きさは、環境によって異なる。
使用例
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
	uintmax_t a = UINTMAX_C(1000);
	printf( PRIuMAX "\n", a );

	return 0;
}

実行結果:

1000
関連 uintmax_t型の定数値を、UINTMAX_Cマクロで得られる。 また、uintmax_t型で表現できる最大値は UINTMAX_MAX で定義されている。
printf関数系の変換指定文字として、PRIuMAXPRIoMAXPRIxMAXPRIXMAX が、 scanf関数系の変換指定文字として、SCNuMAXSCNoMAXSCNxMAXの各マクロがある。
符号付きの最大整数型として intmax_t型がある。
解説章

ULLONG_MAX

概要 unsigned long long型で表現可能な最大の数。
ヘッダ limits.h
形式 #define ULLONG_MAX 18446744073709551615ULL
置換結果 unsigned long long型で表現可能な最大の数。
詳細
注意 long long型の大きさはコンパイラ依存であるが、最低でも 64bit である。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%llu\n", ULLONG_MAX );

	return 0;
}

実行結果:

18446744073709551615
関連 ULLONG_MIN は、unsigned で表現できる最小値は常に 0 であることから、存在しない。
long long型の最小値は LLONG_MIN、最大値は LLONG_MAX で表される。
解説章

ULONG_MAX

概要 unsigned long型で表現可能な最大の数。
ヘッダ limits.h
形式 #define ULONG_MAX 4294967295UL
置換結果 unsigned long型で表現可能な最大の数。
詳細
注意 long型の大きさはコンパイラ依存であるが、最低でも 32bit である。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%lu\n", ULONG_MAX );

	return 0;
}

実行結果:

4294967295
関連 ULONG_MIN は、unsigned で表現できる最小値は常に 0 であることから、存在しない。
long型の最小値は LONG_MIN、最大値は LONG_MAX で表される。
解説章 第20章

ungetc関数

概要 文字を入力ストリームへ押し戻す。
ヘッダ stdio.h
形式 int ungetc(int c, FILE* stream);
引数 c 押し戻す文字。
stream 入力ストリーム。
戻り値 成功したら押し戻した文字 c がそのまま返される。 失敗した場合には、EOF が返される。
詳細 押し戻された文字は、次回の getc関数などの呼び出し時に取り出される。
注意 何文字まで押し戻すことが可能かは環境によるが、最低でも 1文字の押し戻しが可能であることは保証されている。
fseek関数rewind関数fsetpos関数によってファイルポジションが変更された場合、 そのファイルと結び付いていたストリームに対して、既に押し戻されていた文字はクリアされる。
この関数が成功した場合、対象のストリームは終了状態で無くなる。つまり、feof関数が偽を返すような状態に戻される。
使用例
#include <stdio.h>
#include <stdlib.h>

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


	fp = fopen( "test.txt", "r" );
	if( fp == NULL ){
		fputs( "ファイルオープンに失敗しました。\n", stderr );
		exit( EXIT_FAILURE );
	}


	/* 1文字目を読み込む */
	c = fgetc(fp);
	printf( "%c\n", c );

	/* 2文字目を読み込む */
	c = fgetc(fp);
	printf( "%c\n", c );

	/* 2文字目を押し戻す */
	ungetc( c, fp );

	/* 押し戻した文字が読み込まれる */
	c = fgetc(fp);
	printf( "%c\n", c );


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

	return 0;
}

入力ファイル (test.txt) :

aaaaa
bbbbb
ccccc
ddddd
eeeee

実行結果:

a
a
a
関連 C95以降では、ワイド文字版の ungetwc関数が使える。
解説章 第43章

ungetwc関数

概要 文字を入力ストリームへ押し戻す。
ヘッダ wchar.h
形式 wint_t ungetwc(wint_t c, FILE* stream);
引数 c 押し戻す文字。
stream 入力ストリーム。
戻り値 成功したら押し戻した文字 c がそのまま返される。 失敗した場合には、EOF が返される。
詳細 押し戻された文字は、次回の getwc関数などの呼び出し時に取り出される。
注意 何文字まで押し戻すことが可能かは環境によるが、最低でも 1文字の押し戻しが可能であることは保証されている。
fseek関数rewind関数fsetpos関数によってファイルポジションが変更された場合、 そのファイルと結び付いていたストリームに対して、既に押し戻されていた文字はクリアされる。
この関数が成功した場合、対象のストリームは終了状態で無くなる。つまり、feof関数が偽を返すような状態に戻される。
使用例
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

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

	setlocale( LC_CTYPE, "" );

	fp = fopen( "test.txt", "r" );
	if( fp == NULL ){
		fputs( "ファイルオープンに失敗しました。\n", stderr );
		exit( EXIT_FAILURE );
	}


	/* 1文字目を読み込む */
	c = fgetwc(fp);
	printf( "%lc\n", c );

	/* 2文字目を読み込む */
	c = fgetwc(fp);
	printf( "%lc\n", c );

	/* 2文字目を押し戻す */
	ungetwc( c, fp );

	/* 押し戻した文字が読み込まれる */
	c = fgetwc(fp);
	printf( "%lc\n", c );


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

	return 0;
}

入力ファイル (test.txt) :

あいうえお

実行結果:

あ
い
い
関連 マルチバイト文字版の ungetc関数が使える。
解説章

USHRT_MAX

概要 unsigned short型で表現可能な最大の数。
ヘッダ limits.h
形式 #define USHRT_MAX 65535
置換結果 unsigned short型で表現可能な最大の数。
詳細
注意 short型の大きさはコンパイラ依存であり、上記の形式は short型が 16bit の環境の場合である。
ただし、その環境における int型よりも大きいことはあり得ない。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%u\n", USHRT_MAX );

	return 0;
}

実行結果:

65535
関連 USHRT_MIN は、unsigned で表現できる最小値は常に 0 であることから、存在しない。
short型の最小値は SHRT_MIN、最大値は SHRT_MAX で表される。
解説章 第20章

参考リンク

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

更新履歴

'2017/5/2 UINTMAX_C、UINTMAX_MAX、uintmax_t型の説明を追加。

'2017/3/16 ULLONG_MAXマクロの説明を追加。

'2017/3/10 ungetwc関数の説明を追加。

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

'2010/8/13 ungetc関数の説明を追加。

'2010/3/13 UCHAR_MAX、UINT_MAX、ULONG_MAX、USHRT_MAX の説明を追加。

'2009/6/24 新規作成。



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

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

Programming Place Plus のトップページへ