星期四, 3月 08, 2007

Declaration VS Definition

所謂 Declaration,只是告知程式(同時也是告訴我們)有這樣的東西存在,例如:

string s;
extern double d;
int gcd (int a, int b);

除了第一個是宣告也是定義外,後二個只是單純的宣告,而不包含定義。

所謂 Definition,是為該變數(函式)配置空間,並與宣告的名字與型態結合。例如:
vector vec (10);
int gcd (int a, int b) {
if (b == 0)
return a;
return gcd (b, a % b);
}

以上兩者皆是定義。

There must always be exactly one definition for each name in a C++ Program. However, there can be many declarations.

另一個特點在於,只要有宣告,就可以在該 scope 內使用它,但前提是 compiler 要能找到定義所在(需放在全域空間或單純宣告之前),舉個例子:

#include< iostream >
using namespace std;

int main () {
int gcd (int a, int b);
int test = 10;
extern int test;
cout << test << endl;
return 0;
}

int gcd (int a, int b) {
if (b == 0)
return a;
return gcd (b, a % b);
}

其中的 test 及 gcd 都有兩次宣告和一次定義,因為在很多時候,定義時宣告的過程是難以避免的。

沒有留言: