• ベストアンサー

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で書いたような... その質問と回答をみて、それだけではわからなかったので質問しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • c++ cmathとmath.h

    お世話になります。c++を始めたばかりの者です。 cmathとmath.hの二つのヘッダーファイルは、それぞれ何をするときに使用するのでしょうか。 教本やネットを調べてもイマイチ理解できず、質問させていただきました。 ご回答よろしくお願い致します。

  • C言語のソースをC++言語に変換したい

    C言語で書かれていたソースをC++言語に変換したいのですが どのような点に気をつければよいでしょうか 現在、プログラムの主な構造は構造体とそれを扱う関数が実装されていて、 これらをクラスを使用して書き換えようと思います。 それ以外に気にしておくものはありますか。 例えば、ヘッダファイルで<stdio.h>をインクルードしているところがありますが、 これは<cstdio>に書き換えたほうがよいかもしれない、と言われたことはあります。 printfなどはprintfのまま使用しても大丈夫ですか。 std::printfに書き換えたり、iostreamを使用する方法に書き換えたほうがいいですか。 規格としてはどのようになっているのでしょうか。 (「過去との互換性のためにあるだけであり、非推奨」とかあったりしますか。)

  • stdio.h について

    質問です。 Borland C++ Compiler 5.5 を使っているのですが…。 Includeの中にstdio.hのファイルがありません stdio.hのソースを教えて下さい!!

  • Visual C++ 2008で<stdio.h>のインクルード文が使えない!?

    #include <stdio.h> int main(){ printf("hello!"); } で実行すると、 : warning C4627: '#include <stdio.h>': プリコンパイル済みヘッダーの使用を検索中にスキップされました ディレクティブを 'stdafx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します .\■■■.cpp(5) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? と言ったエラーが起きてしまいます。 ちなみに、インクルードファイルらしき物を削除しまくった覚えがあります…。100%これが原因かと。 これが原因だとしたらどうすればいいんでしょうか? あと、DXライブラリが使えるように設定を変えたこともあります。 どこの何を変えたかは忘れてしまいましたけど。

  • stdio.hの中身

    C言語でよく使う、stdio.hというファイルの中身を見たいのですが、どうすれば見れるかわかりません。 教えていただけないでしょうか??

  • math.hに含まれる関数が使えない

    math.hヘッダーをインクルードして、sqrt()やcos()の関数を使おうとすると、関数sqrt()は定義されていませんとエラーが出て正常にコンパイルできません。 他のヘッダー(stdio.hやstring.hやstdlib.h)の関数は正常に使えてますので、パスの設定は問題ないと思うのですが…… 解決方法はあるのでしょうか?宜しくお願いします。

  • C/C++のヘッダーファイルやライブラリー関数について

    C言語の勉強をはじめました。コードの最初に書く#include<stdio.h>などの ヘッダーファイルやライブラリ関数を見ることはできるのでしょうか? 初歩的なことですみませんがよろしくお願い致します。

  • #inclede<stdio.h>の内容を見たい

     今晩は、Cの初心者です、宜しくお願いします。  Cのコードの最初に「#inclede<stdio.h>」と書きますが、このファイル?を実際に見るのはどのようにしたら 見ることが出来るのでしょうか。  宜しくお願いします。

  • math.h

    C言語で以下のプログラムを打ちました #include <stdio.h> #include <math.h> main(){ printf("%f\n",sin(23.5)); } そして。下記の用に実行すると以下のようにエラーがでます。エラーからするにサイン関数が見つからない用な事いっているのですが、一体なん何んでしょう? ちなみに。OSはRed hut Linux 7.3です. % gcc -o sample sample.c /tmp/ccwod1zy.o: In function `main': /tmp/ccwod1zy.o(.text+0x17): undefined reference to `sin' collect2: ld returned 1 exit status

  • iostream stdio 違いについて。

    一昔前のC言語では、#include <stdio.h>などのものを、C ++言語では、#include <iostream>の1行で済ませるということでしょうか? だけど、C + +言語で、#include<stdio.h>を使いたければ使うことは出来ますよ。だけど、#include<iostream>だけで、済みますよ。という事でしょうか?つまり、#include<iostream>は、全ストリームつまり、全ファイル・全ライブラリを1つにまとめたという事でしょうか?教えて頂けると幸いです。