2016-11-21 13 views
0

私は、関数のプロトタイプがそれぞれのヘッダーファイルにあることを理解します。標準関数の宣言は標準ライブラリにあり、そのために "using namespace std"という用語を使用しています。しかし、非標準関数の宣言はどこに格納されていますか?非標準関数の宣言はどこにありますか?

+12

このように、「using namespace std」_という用語を使用しています。一般的に、私たちはしません(http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)。 –

+0

実装者はどこにでも存在することを望みます。これは 'std'名前空間以外の場所です。通常、グローバル名前空間にあります。 –

+0

経験豊富なC++開発者は、 "using namespace std;"を使用することはありません。これは、不明瞭なバグにつながります。 C++以外のライブラリ関数が実行される限り、それらは名前のないグローバル名前空間で宣言されます。 –

答えて

3

標準ライブラリをヘッダファイルとして実装する必要はありません。

C++標準では、#include <vector>を実行すると何が起こるかを示しています。システム上のヘッダファイルにはvectorは必要ありません。特定のシンボルや型を導入するコンパイラ組み込み関数として実装できます。

これらの記号や種類とやり取りするときに何が起こるかが決まります。

これは通常、ヘッダーファイルとして簡単に実行できます。 stdにはC++で実装できないC++機能がいくつかあります。通常、「サーフェス」インタラクションはC++で行われますが、マジックコンパイラの組み込み関数には戻されます。

stdの多くは存在し、純粋なヘッダーファイルとして存在します。その他の部分は通常、ほとんどの場合CまたはC++で書かれたライブラリにコンパイルされます。それらはオペレーティングシステムライブラリと相互作用します。オペレーティングシステムライブラリはC言語(と時にはC++やその他の言語)で書かれていますが、C言語とアセンブリ言語の組み合わせで記述されたハードウェア固有のコードと対話します。

"ランタイム"ライブラリは、動的にまたは静的に出力にリンクすることができ、C++に必要なものと特定のOSが提供するものとの間の一種の「接着剤」として機能します。


他のライブラリが存在する可能性があります。ヘッダファイルは、コンパイラによって決められた方法で格納され、コンパイラによって決められた方法で検索されます。これらのライブラリが動的にまたは静的にリンクされるのは、前記ライブラリが存在する場合と同様に、コンパイラによって決定される方法でも行われる。

これらは、コンパイラが期待するABIと一致するインターフェイスをエクスポートする限り、多くの言語で記述できます。

+0

あなたはより簡単な言葉で説明できますか?私はあなたの答えを完全に得ていませんでした。ありがとう。 –

+0

@TanmayBhatnagar C++がどのように実行可能ファイルやライブラリにコンパイルされるのですか? – Yakk

+0

私は、コードをコンパイルすると、リンクはヘッダーファイル内のすべてのプロトタイプをそれぞれの関数宣言にリンクすることを理解します。その後、コンパイラはソースコードをオブジェクトコードに変換します。 –

関連する問題