C関数の戻り値の型が、C#などで使用されているisalpha() intのではなく、似ているのはなぜですか?bool
4 に答える
falseにゼロを使用し、 trueにゼロ以外を使用することは、C 標準ライブラリ関数で広く使用されています。これらの関数の多くは、bool(またはBOOL, _Bool) 型が一般的に使用される前に作成されました。
具体的には、 のような関数isalphaは C89 で指定されていますが、ブール型は C99 までありません。
したがって、C 標準ライブラリ関数全体でこれが見られることを期待してください。通常bool、C++ コードで使用されます。
元のCにはboolデータ型はありませんでした。
理論については、この回答を確認してください: Is bool a native C type?
C には、1999 年の標準より前に専用の Boolean データ型がありませんでした。それ以前は、言語はゼロ以外の整数式が True を表し、ゼロ値の整数式が False を表すと単純に想定していました。
標準ライブラリ (isalpha関数を含む) の多くは、データ型の導入よりも前のものであるため、これらの関数はブール値をbool返します。intWG14 が C99 とのインターフェースを変更しなかったのはなぜですか? C89以前で書かれた多くのレガシーコードがあり、そのようなインターフェースの変更はそのコードを壊すでしょう.WG14(言語標準の維持を担当する委員会)は当然のことながらそれを嫌がります. gets一体、図書館の呼び出し  を取り除くのに20年以上かかりました.
2 番目の質問については、<<C++ の出力演算子はchar *他のポインター型とは異なる方法で処理し、C スタイルの文字列の先頭を指していると想定します。実際のポインター値を表示したい場合は<<、次のようにキャストする必要がありますvoid *(または同様にばかげたことを行います)。
char *str = "This is a test";
...
cout << "str = " << str << "; address = " << (void *) str << endl;
Cにはもともと組み込みのbool型がなかったからです。