質問

少し混乱イム。前方宣言と前方参照の違いは何ですか?あなたはまだ実装されてイマイチ関数を宣言するとき前方宣言は、私の頭の中で、ですが、これは間違っていますか?あなたは、「前方参照」または「前方宣言」?

ケースを宣言するのいずれかに指定した状況を見てする必要がありますか

他のヒント

A を前方宣言のあなたはそれを実装し、使用する前に、メソッドや変数の宣言です。前方宣言の目的は、コンパイル時間を節約することです。

変数の前方宣言は、後でその変数の値を設定することができますので、収納スペースは、脇を設定することになります。

関数の前方宣言はまた「関数プロトタイプ」と呼ばれ、関数の名前が何であるかの関数の戻り値の型が何であるか、コンパイラ、および種類そのパラメータを告げる宣言文です。そのようなC / C ++とPascalストアとしての言語のコンパイラは、それはあなたのコードでそれらを越えてくると、ルックアップテーブルと参照それらを(関数を含む)のシンボルを宣言しました。これらのコンパイラは、それは、上から下にある、あなたのコードを順番に読んで、あなたが前方に宣言しない場合、コンパイラは、ルックアップテーブルに参照することはできませんシンボルを発見し、それがわからないというエラーが発生します機能への対応方法について説明します。

前方宣言は、あなたが他の場所(の実装を記入)関数を定義したコンパイラへのヒントです。

int first(int x); // forward declaration of first

...

int first(int x) {
   if (x == 0) return 1;
   else return 2;
}

しかし、あなたが尋ねる、私たちは、コンパイラを持っていない理由は、すべてのソースファイルに2回通過させる:参照を解析し、それらをルックアップするために、インデックスの最初の1内のすべてのシンボル、および第二の?ダンの物語によるます:

  Cは、1972年に作成された場合には、

、コンピューティングリソースは、はるかに不足しました   そして、高いプレミアムで - メモリが複合体を格納するために必要   プログラムの全体を象徴表は、一度、単純では利用できませんでした   ほとんどのシステム。固定記憶はそう、また高価な、そして非常に遅かったです   仮想メモリまたはシンボリックテーブルの収納部分に同様のアイデア   ディスクは、単に合理的でコンパイルを許可していません   あなたは、磁気テープを扱っているときの時間枠...どこシーク時間   秒単位で測定し、スループットがあたりのバイト数で測定された読み取り   第二の(ないキロバイトまたはメガバイト)、それはかなり有意義であった。

     

C ++、ほぼ17年後に作成された一方で、スーパーセットとして定義しました   Cの、したがって同じメカニズムを使用していた。

     

Javaは1995年の周りに巻かれた時間では、平均的なコンピュータは十分にありました   でも、複雑なプロジェクトのために、シンボリックテーブルを保持し、あったことを記憶   もはやかなりの負担はありません。そして、Javaができるように設計されていませんでした   Cとの後方互換性、それは遺産を採用する必要がなかったので、   機構。 C#が同様に邪魔されないあった。

     

その結果、彼らの設計者は負担をシフトすることを選びました   バックプログラマオフシンボリック宣言を区画化し、   に比例してそのコスト以来、再びパソコンの上に置きます   コンパイルの合計努力は最小限であった。

JavaやC#では、識別子は、ソースファイルから自動的に認識され、動的ライブラリのシンボルから直接読み取ります。これらの言語では、ヘッダファイルは同じ理由のために必要されていません。

A の前方参照の逆です。それは、その宣言の前に実体の使用を意味します。たとえばます:

int first(int x) {
   if (x == 0) return 1;
   return second(x-1); // forward reference to second
}

int second(int x) {
   if (x == 0) return 0;
   return first(x-1);
}

「前方参照」は同義語として、しかしあまり、時々使用されることに注意してください「前方宣言。」

フォワード宣言は言語(C、パスカル)のシングルパスのコンパイルを可能にするために使用されます。

前方参照を前方宣言(JavaやC#)とせずに許可されている場合、

2パスコンパイラが必要とされている。

scroll top