MW211 EXIT

devlog
C言語/isdigit()の引数がint型
2013年03月02日
「isdigit()」は「'0'~'9'」なら真(0以外)を返却し、
それ以外なら偽(0)を返却する便利な関数だ。

なのでその定義が「bool isdigit(char c);」とかと思ったら、
「int isdigit(int c);」なのだ。

ま、関数の型のintは、0からそれ以外で解釈するからいいとして
なんで引数はint型なの?

型に従って変換とかすると(「isdigit(atoi('1'))」みたいに)、偽になってしまう。

これは、数値の「0~9」は「0x00~0x09」で、
文字の「'0'~'9'」は「0x30~0x39」の違いがあって、
「0x30~0x39」なら真って判定しようと待ち構えていたら
「0x00~0x09」が入力されたのでアウト(偽)!って判定したってことらしい。

この場合は直接(「isdigit('1')」みたいに)でいいらしい。

なんだかややこしいC言語の世界。

int型は最速なんです、便利なんです、万能なんですってことなんだろうか。
ま、変換だなんだで時間をくうよりは少々わかりにくくてもダイレクトにってのが
C言語だからね(だからとっつきづらいし、罠が多い(覚えてらんないよ))。

つーから、マジマジと定義を見るまでint型に気づかなかった(反省)。
分類:C/C++