• ベストアンサー

C++でのmath.hやstdio.hの使用につい

C++言語でソースコードをかくとき、ヘッダファイルでmath.hやstdio.hを使用するのはよくないのでしょうか cmathやcstdioを使用しなければならないのでしょうか あるいはmath.hやstdio.hよりも、cmathやcstdioの使用が推奨されているのでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

C++ 標準のヘッダファイルでも、たとえば、以前は、#include <iostream.h> でしたが、最近は、#include <iostream> になっています。 これは、もともと、「名前空間」という概念が導入されたときに、そのあおりで変わりました。 従来の標準関数は、名前空間、std の中に収まりました。なので、標準関数と同じ名前の関数も(グローバル関数としてや、別の名前空間の関数として)使用可能になりました。 標準関数の名前の衝突は(標準関数なだけに)あまりないですが、いろいろなライブラリをつなぎ合わせると、read() があちこちにあったりという、そういう場合に、ライブラリごとに適切な名前空間を設定すれば、名前の衝突を防ぐとこができますということです。 さて、この時に、Cの標準ヘッダとどうしようかということになりました。 同じように、 stdio.h を stdio というように読み替えれば、問題はなさそうですが、なんと、時を同じくして、C++に、string という定義が導入されました。 これが、同じく、Cの標準ヘッダである、string.h とぶつかります。 これを解決するためもあって、Cの標準ヘッダは、 stdio.h → cstdio ということになったわけです。 そういう意味では、少なくとも、 #include <iostream> としているなら、#include <cstdio> でしょう。

nanako_04
質問者

お礼

回答ありがとうございます。 > そういう意味では、少なくとも、 #include <iostream> としているなら、#include <cstdio> でしょう。 よくわかりました。ありがとうございます。

その他の回答 (1)

回答No.1

math.hやstdio.hは過去のコードとの互換性のために使えるようになっているだけです。 新規作成するコードではcmathやcstdioを使ったほうがよいでしょう。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf のAnnex D compatibility featuresとD.5 C standard library headersを御覧ください。 ということを最近http://okwave.jp/qa/q8344888.htmlで書いたような...

nanako_04
質問者

お礼

> ということを最近http://okwave.jp/qa/q8344888.htmlで書いたような... その質問と回答をみて、それだけではわからなかったので質問しました。