[Mew-dist 14765] Re: bin.tar.gz

Atsushi Onoe onoe at example.com
2000年 10月 26日 (木) 10:31:54 JST


> なお、isdigit については、平気なのではないかと思いますが、僕は
> unsigned char だったらイヤなことが起きそうだという過去の経験から、
> ついつい & 0xff して渡したりします。isdigit の側が知ってれば問題起らな
> いですが。(単なるパラノ)

char が signed char か unsigned char かは処理系依存です。
つまり、int を引数に要求する関数に char を渡すのは処理系によって
受け取る値が変わることになるので、warning 出すのは親切に思えます。

実際、isdigit() に MSB の立った signed char (つまり EOF 以外の負の値)を
渡してはいけません。portable なプログラムでは
	char *p;
	if (isdigit((unsigned char)*p))
		...
の様にキャストするのが普通です。(int) や (unsigned int)でキャストしても
無意味なので注意。

なお、C では文字を扱う関数では、char でなく int を使います。これは主に
EOF が char で表現できないためです。
	文字 := 0..255 | EOF
もちろん文字列は char [] であって、int [] ではありませんが。

引数、戻り値に int より小さい(short, char など)を使う場合の処理は
K&R と ANSI で違った様な気もします。これも上記の理由の一つかも知れません。

# さて、どのくらい正しいかな:-p

尾上



Mew-dist メーリングリストの案内