變量的定義(definition):用于為變量配置設定存儲空間,還可以為變量指定初始值。在一個程式中,變量有且僅有一個定義;
變量的聲明(declaration):用于向程式表明變量的類型和名字。
定義也是聲明:當定義變量時我們聲明了它的類型和名字。可以通過使用extern關鍵字聲明變量名而不定義它。
有配置設定空間的叫定義,沒配置設定空間的叫聲明。
另外,“定義”的同時一定耦合了一個“聲明”
簡單來說有下面四種情況:
1. 變量和對象不加extern永遠是定義,類中的除外。
int i; //定義
string str; //定義
extern int i; //聲明
2. 函數隻有函數頭是聲明,有函數體是定義。
void fun (int i, char c) ; // fun是聲明, i, char, 也是聲明
void fun (int i, char c) // fun是定義
{
......
}
3. 如果聲明有初始化式,就被當作定義,即使前面加了extern。
extern double pi = 3.14159;
4. 類的情況
class A; //A的聲明
class A{…};//A的定義
class A
{
static int x; //這裡的x是聲明,即x還沒有配置設定空間
static const int a; //這裡的a是聲明,同上
void fun(); //這裡的函數是聲明
//非static變量在類定義對象時才配置設定記憶體.
int a; //a是定義,已配置設定空間
char c; //c是聲明,同上
};
int A::x; //這個才是定義
const int A::a=11; //這個才是定義
注:在VC裡編譯下面代碼會出現以下錯誤
void fun(int a, int a); // a應該是個聲明
error C2086: 'a' : redefinition
提示說是重複定義,其實a是聲明,但總不能說重複聲明吧,再說聲明是可以多次的,是以這裡提示的‘定義’非我們上面提到的‘定義’。