電子書籍の厳選無料作品が豊富!

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

A 回答 (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> でしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> そういう意味では、少なくとも、 #include <iostream> としているなら、#include <cstdio> でしょう。

よくわかりました。ありがとうございます。

お礼日時:2014/01/01 19:19

math.hやstdio.hは過去のコードとの互換性のために使えるようになっているだけです。


新規作成するコードではcmathやcstdioを使ったほうがよいでしょう。

http://www.open-std.org/jtc1/sc22/wg21/docs/pape …
のAnnex D compatibility featuresとD.5 C standard library headersを御覧ください。

ということを最近http://oshiete.goo.ne.jp/qa/8344888.htmlで書いたような...
    • good
    • 0
この回答へのお礼

> ということを最近http://okwave.jp/qa/q8344888.htmlで書いたような...

その質問と回答をみて、それだけではわからなかったので質問しました。

お礼日時:2014/01/01 19:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!