を使っ++ #include
ディレクティブとusing namespace
の違いは何ですか?また、あなたは別のファイルとして自分の名前空間を保存して、このようなファイルのファイル拡張子は何であるのか? C++、#include
でC++:Cでの名前空間との#include
答えて
質問に答えるために、少し前に戻ってCとC++の基本を取り上げます。
C/C++をコンパイルするとき、ソースファイルを実際の実行可能ファイルにコンパイルすることは、実際にコンパイルとリンクの2つのステップです。コンパイルのステップでは、一度に1つの.cppファイルを取り込み、これをコンパイルします。他の.cppファイルの内容はコンパイラには表示されません。これは、「オブジェクトファイル」(それは、このようなと呼ばれる理由を私は知らない)を発生します。すべてのオブジェクトファイルはリンカによってリンクされ、最終実行ファイルが生成されます。
これは、C++、宣言および定義の2つの重要な概念をもたらします。宣言は、何か(変数または関数)がどこかに存在することを指定します。以下は、
void Foo();
)関数はFoo(の宣言ですこれは、私たちがどこかに引数を取らず、何も値を返さない関数はFoo()があるでしょうコンパイラに言ったことを意味します。
実際にどのような機能が定義されているかの定義。ここで関数は
void Foo() { cout << "Foo!!"; }
は、バーを別の関数を定義することができます定義されている()
void Bar() {
Foo();
cout << "bar";
}
この関数は、関数はFoo()を呼び出します。関数fooがすでに宣言されてのいずれか、または同じファイル内で事前に定義されていない場合、この関数は、コンパイルすることはできません。したがって、宣言はコンパイルされたコードを生成しません。彼らはただそこにいなければなりません。
このファイルに関数Foo()が定義されていないのに、別の.cppファイルが定義されている場合、リンカはこれら2つの関数の間の接続を行います。関数Foo()がどこにも定義されていないと、コンパイラエラーではなくリンカエラーが発生します。
これはヘッダーファイルの概念になります。ヘッダーファイルは、宣言を格納する場所です。 #includeを使用してヘッダファイルの内容をインクルードすると、実際にはプリプロセッサ(実際のコンパイラの前に実行されるステップ)がインクルードされたファイルを読み込み、内容を元のソースファイルにペーストします。したがって、ヘッダファイル全体が実際にC++ファイルに貼り付けられたかのように、コンパイラはファイルを参照します。一方、
名前空間は、単に道には、論理的にグループコードをであるあなたがC++でプログラミングするとき
だから、あなたは、通常の.cppファイルで、あなたの定義を配置します、とあなたは.hファイルであなたの宣言を配置します。
名前空間は別々のファイルには格納されず、特定のファイル拡張子がありません。複数の名前空間を持つプロジェクトがある場合は、名前空間ごとに別々のディレクトリを作成することもできます(状況に応じて再配置することもできます)。
は、例えば
(名前空間は、Cには適用されません)namespace
が論理モジュール内にオブジェクトを保持するために使用されている間、あなたのプロジェクトにファイルを追加するために使用され、ファイル内のベクトルクラスを持っているかもしれません「vector.h
」あなたはあなたのプロジェクトに含めるようにします。
ベクトルは、大規模なライブラリ(標準ライブラリ)STDの一部であるので、あなたは、プログラマは怠け者だとstd ::すべて上書きしたくないので、しかし
std::vector
とそれにアクセスすることができます(標準ライブラリには非常に多くの非常に便利な部分があります)、ファイルの先頭に、
using namespace std
と書くことができます。定義があるかもしれないので、これは名前空間stdにチェックも、毎回それは(このようなベクターなど)のタイプを見て、コンパイラを教えてくれます。このようにして、次の文は同等になります。 vector.hで
std::vector
vector
、あなたはとても
namespace std
{
class vector { /* Implementation */ }
}
#include
のようなものが表示されるはずですusing namespace
はあなたのコードクリーナーを維持し、「意味のある」ライブラリにパッケージすることがある一方で、ファイルを追加することです。プログラミング時にusing namespace
を省略することはできますが、絶対に必要とします#include
- 1. C++での名前空間
- 2. 名前空間
- 3. スタックトレースと名前空間での機能
- 4. 名前空間なしのGroovy XMLSlurper名前空間エラー
- 5. 名前空間と単位
- 6. respond_withと名前空間
- 7. 名前空間とusingディレクティブ
- 8. SimpleXMLと名前空間
- 9. StAXと名前空間
- 10. 名前空間とルーティング
- 11. Visual Studioと名前空間
- 12. PHP名前空間とインターフェイス
- 13. エンティティグループと名前空間
- 14. svcutil.exeと名前空間パラメータ
- 15. #includeを名前空間ブロックにラップするのは良い考えですか?
- 16. html:FBML名前空間
- 17. 名前空間&__autoload
- 18. WPF:XAML名前空間
- 19. 名前空間dict?
- 20. 名前空間カスタムイベントトリガー
- 21. IPython.parallel名前空間
- 22. IInvokeProvider名前空間?
- 23. angularjs名前空間
- 24. 名前空間のエラー
- 25. PHPの名前空間5.2
- 26. 変数の名前空間
- 27. 名前空間のjqueryプラグイン
- 28. VIM:マーカーの名前空間
- 29. 名前空間内のプライベートクラス
- 30. PHPのルート名前空間
Cには名前空間がなく、C++にのみ変更されています。 –