C++#include<filename> and #include<filename.h
での>の使用の違いは何ですか? 2つのうちどちらが使用され、なぜ使用されるのですか?
5 に答える
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 を参照)。cfilename
filename.h
::size_t
std::size_t
今、それらが違いでした。
なぜ `filename.h` を使うのですか?
- C コンパイラとの互換性
- 非常に古い C++ コンパイラとの互換性
なぜ `cfilename` を使用する必要があるのですか?
- 名前は namespace 内にあります
std::
。もう名前の衝突はありません。 - C++ の新機能 (float、long のオーバーロードされた数学関数など)
- C 互換ヘッダー (
filename.h
) は将来的に消える可能性があります。
これ#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>
古い標準では、#include <filename.h>
構文が使用されていました。名前空間とテンプレートが言語に追加されたとき、標準は に変更されました#include <filename>
。
これは、標準ライブラリのものをすべて std 名前空間に配置できるようにするために行われました。#include <filename.h>
ファイルは名前空間を使用しないため、名前空間の概念がなかった古いコードは引き続き機能します。
新しいコードでは、常にこの形式を使用する必要があり#include <filename>
ます。古い形式を使用すると、それらが定義するすべてのシンボルが std ではなくグローバル名前空間に配置されます。
.h が付いていないものは C++ ヘッダー ファイルで、.h が付いているものは C ヘッダー ファイルです。これは、C++ の標準ヘッダー ファイルにのみ適用されます。
独自のファイルまたは標準 C++ の一部ではないファイルを含める場合は、常に完全なファイル名 (何でもかまいません) を記述する必要があります。
標準ライブラリについて話している場合 (それ以外の場合はまったく機能しないため)、違いは次のとおりです。
#include< header >
//my code
C++ 標準に従ってヘッダーを呼び出す正しい方法ですが、
#include< header.h >
//my code
(C++ 標準では非推奨ですが、C99 標準によれば依然として必要です)、残りの C バゲージと共に付属しています。
したがって、次を使用する必要があります。
#include< cmath >
//my code
いいえ:
#include< math.h >
//my code