【C、C++】ctype.h、cctypeにおけるisnumber()関数とisdigit()関数の違い

1282 ワード

Mac OS Xマニュアルページのctype関数のisnumber()とisdigit()関数の違いは、次のように説明されています.
The isnumber() function behaves similarly to isdigit(), but may recognize additional characters, depending on the current locale setting. 
すなわち、isnumber()関数はisdigit()と似ていますが、isnumber()は現在の領域設定~に応じて他の文字を認識する可能性があります.
XCodeまたはCLion(Mac版)のctype.h(またはcctype)ではisnumber()関数が見られるかもしれませんが、C++の公式ドキュメントを調べても見つからないのは、isnumber()がC/C++の公式ライブラリ関数ではなく、AppleがわざわざMac OSのC++に追加した使いやすい関数(これらの関数は多く、isnumberだけではありません)だからです.Mac OS X Man Pagesのctype関数ページを見て、isnumber()関数を見つけることができます.マニュアルにもisnumber()はC 90規格ではありません.
These functions, except for digittoint(), isascii(), ishexnumber(), isideogram(), isnumber(), isphonogram(), isrune(), isspecial() and toascii(), conform to ISO/IEC 9899:1990 (ISO C90”).
isnumber()関数を使用してLinux環境でg++をコンパイルできない場合は、次のようになります.
g++ a.cpp

a.cpp: In function 'int main()':

a.cpp:20:17: error: 'isnumber' was not declared in this scope

   if (isnumber(c)) {

                 ^

Clangでもコンパイルできません.
clang++ a.cpp --std=c++11

a.cpp:20:7: error: use of undeclared identifier 'isnumber'

                if (isnumber(c)) {

                    ^

だからisnumber()は標準的なC/C++ライブラリ関数ではなく、ブラシアルゴリズムの場合は使用しないでくださいね~