0

重複の可能性:
<string>と<string.h>の違いは?

私の特定の例では、次の句を使用しています。

#include <string>

代わりに次の句を使用する場合

#include <string.h>

コンパイラがエラーで終了する

[BCC32エラー]utils.cpp(173):E2316'getline'は'std'のメンバーではありません

utils.cppファイルの173行目は次のとおりです。

while(std::getline(in, line, '\n'))

この2つの節に違いはないと思いました。今、私は混乱しています。これらの2つの句には、実際にはどのファイルが含まれていますか?たとえば、私のC ++ BuilderインストールにはプログラムディレクトリC:\ Program Files \ RAD Studio \ 9.0があり、インクルードファイルはサブディレクトリC:\ Program Files \ RAD Studio \ 9.0\includeにあります。

4

3 に答える 3

8
#include <string>

これには、C++文字列ヘッダーが含まれます。

#include <string.h>

これには、グローバル名前空間内のすべての識別子を含むC文字列ヘッダーが含まれます。(非推奨)

#include <cstring>

std::これには、名前空間に配置されたすべての識別子を持つC文字列ヘッダーが含まれます。

編集:経験則-C++ヘッダーが「.h」で終わることはありません。従来のCヘッダー名の前に「c」を付け、「。h」を削除して、グローバル名前空間をクリーンに保ちます。プロジェクトのCヘッダーにのみ「.h」を使用してください。C++のみのヘッダーには「.hpp」を使用します。

于 2012-07-10T11:44:09.427 に答える
2

それらは2つの異なるヘッダーです。標準ライブラリの規則ではC、ヘッダーはで終わりますが.hC++標準ライブラリの規則では、ファイル拡張子を完全に省略します。ウィキペディアからの詳細:

C標準ライブラリの各ヘッダーは、.hを削除し、先頭に「c」を追加することによって生成された、異なる名前でC++標準ライブラリに含まれています。たとえば、「time.h」は「ctime」になります。これらのヘッダーと従来のC標準ライブラリヘッダーの唯一の違いは、可能な場合は関数をstd ::名前空間に配置する必要があることです(ただし、実際にこれを行うコンパイラはほとんどありません)。ISO Cでは、標準ライブラリの関数はマクロで実装できますが、ISOC++では許可されていません。

他のライブラリは異なる規則に従います。たとえば、Boostは、選択.hppするC++ヘッダー拡張として選択します。

于 2012-07-10T11:44:53.800 に答える
-2

慣例により、C(手続き型)ヘッダーは「.h」「string.h」、「stdio.h」...で終わり、C ++(ほとんどの場合オブジェクト指向)には拡張子「iostream」、「string」は含まれません。 ..

すべてのヘッダーがこの規則に従っているかどうかはわかりませんが、標準のヘッダーはすべて準拠していると思います。

于 2012-07-10T11:46:07.333 に答える