39

C++#include<filename> and #include<filename.hでの>の使用の違いは何ですか? 2つのうちどちらが使用され、なぜ使用されるのですか?

4

5 に答える 5

38

C 標準にない C++ のみのインクルード ファイルは使用されませんfilename.h。最初の C++ 標準が登場して以来 (1998 年) filename、独自のヘッダーに使用されています。

C 標準によって継承されたファイルは、cfilename代わりにfilename.h. 同様に継承された C ファイルfilename.hは非推奨ですが、依然として C++ 標準の一部です。

違いは、C でマクロとして定義されていない名前が C++ の名前空間内にあるのに対し、名前std::はグローバル名前空間スコープ内にあることです。そのため、stddef.h と cstddef で見つけることができます。どちらも標準 C++ ですが、::size_t の使用は非推奨です (C++ 標準の付録 D を参照)。cfilenamefilename.h::size_tstd::size_t

今、それらが違いでした。

なぜ `filename.h` を使うのですか?

  • C コンパイラとの互換性
  • 非常に古い C++ コンパイラとの互換性

なぜ `cfilename` を使用する必要があるのですか?

  • 名前は namespace 内にありますstd::。もう名前の衝突はありません。
  • C++ の新機能 (float、long のオーバーロードされた数学関数など)
  • C 互換ヘッダー ( filename.h) は将来的に消える可能性があります。
于 2008-11-19T13:33:10.773 に答える
22

これ#include <foo.h>は、C++ 標準より前の C++ コードでは一般的でした。標準は、名前空間#include <foo>に配置されたヘッダーからのすべてでそれを変更しました。std(標準では .h ヘッダーが許可されていないことを指摘してくれた litb に感謝します。)

最初に「foo.h」というファイルを検索し、次に「foo」というファイルを検索します。これらは、ファイル システム内の 2 つの異なるファイルです。標準は、含める必要があるファイルの名前を変更しただけです。

ほとんどのコンパイラでは、下位互換性 (および C との互換性) のために古いヘッダーがまだ残っていますが、標準に準拠したい最新の C++ プログラムではそれらを使用しないでください。

標準 C ヘッダーの場合、C++ バージョンは先頭に ac があるため、C ヘッダーは

#include <stdio.h>

になる

#include <cstdio>
于 2008-11-19T11:13:54.047 に答える
6

古い標準では、#include <filename.h>構文が使用されていました。名前空間とテンプレートが言語に追加されたとき、標準は に変更されました#include <filename>

これは、標準ライブラリのものをすべて std 名前空間に配置できるようにするために行われました。#include <filename.h>ファイルは名前空間を使用しないため、名前空間の概念がなかった古いコードは引き続き機能します。

新しいコードでは、常にこの形式を使用する必要があり#include <filename>ます。古い形式を使用すると、それらが定義するすべてのシンボルが std ではなくグローバル名前空間に配置されます。

于 2008-11-19T13:13:24.663 に答える
2

.h が付いていないものは C++ ヘッダー ファイルで、.h が付いているものは C ヘッダー ファイルです。これは、C++ の標準ヘッダー ファイルにのみ適用されます。

独自のファイルまたは標準 C++ の一部ではないファイルを含める場合は、常に完全なファイル名 (何でもかまいません) を記述する必要があります。

于 2008-11-19T11:09:24.947 に答える
2

標準ライブラリについて話している場合 (それ以外の場合はまったく機能しないため)、違いは次のとおりです。

#include< header >
//my code

C++ 標準に従ってヘッダーを呼び出す正しい方法ですが、

#include< header.h >
//my code

(C++ 標準では非推奨ですが、C99 標準によれば依然として必要です)、残りの C バゲージと共に付属しています。

したがって、次を使用する必要があります。

#include< cmath >
//my code

いいえ:

#include< math.h >
//my code
于 2008-11-19T11:09:56.473 に答える