-1

重複の可能性:
定義と宣言の違いは何ですか?

変数に関するこれら 2 つの用語について、私は非常に混乱しています。同じように見える本もあれば、まったく違う本もあります。変数または関数の宣言の意味と、変数または関数の定義の意味を教えてください。

4

2 に答える 2

1

宣言は、たとえば、変数「x」が存在することをマシンに伝えるようなものです。何かに設定することもできます。

変数を定義することは、変数を何かに設定することです。

(間違っているかもしれません、これは私の考え方です)

于 2012-11-01T04:59:33.970 に答える
0

宣言はコンパイラに何かが存在することを伝えますが、必ずしもそのコードや値を提供するとは限りません。たとえば、関数を宣言する場合:

void foo();

関数の実際のコードがまだ提供されていなくても、関数の呼び出しを適切にコンパイルできるように、関数の名前、その引数 (この場合はなし)、および戻り値の型をコンパイラに伝えます。プログラムの別の場所 (おそらく別のソース ファイル) で、定義を提供します。

void foo() {
  std::cout << "Hello, world!" << std::endl;
}

定義しているものがまだ宣言されていない場合、定義は宣言としても機能します。

一般に、定義をソース ファイルに入れ、宣言をヘッダー ファイルに入れることで、定義を含むソース ファイル以外のソース ファイルから "見える" ようにします。ただし、C++ でクラスを作成すると、次のようになります。

class Blah {
public:
  void blah();

private:
  int x;
};

これは、メンバーの宣言を含むクラスの定義です。クラス定義は通常、ヘッダー ファイルに入れますが、メンバー関数の定義は通常は入れません (テンプレートとインライン関数を除く)。

コンパイルとリンクがどのように機能するかについて、この回答を読むと参考になるかもしれません。

于 2012-11-01T05:09:26.940 に答える