一、
#includeusing namespace std;
// 變量聲明
extern int g;
int main ()
{
? // 變量定義
int g;
? // 實(shí)際初始化
g = 100;
cout << g << endl;
? return 0;
}
記錄1:extern int g; ?只是聲明了一個變量 g戒职;但是并沒有定義,所以仍然需要定義: int g透乾;才能使用變量g洪燥;而且聲明一個變量是可以在main函數(shù)之外,也不在任何函數(shù)體里面的乳乌;但是定義變量捧韵,就只能在函數(shù)體里面了。變量聲明向編譯器保證變量以給定的類型和名稱存在汉操,這樣編譯器在不需要知道變量完整細(xì)節(jié)的情況下也能繼續(xù)進(jìn)一步的編譯再来。
二、
#includeusing namespace std;
// 變量聲明
extern int g;
int main ()
{
? // 實(shí)際初始化
g = 100;
cout << g << endl;
? return 0;
}
記錄1:運(yùn)行會報錯:/tmp/005382996/main.cpp:(.text+0x1c): undefined reference to `g'磷瘤;聲明并不是定義芒篷。
三、
記錄1:定義包含了聲明采缚,但是聲明不包含定義针炉;
int a = 0; //定義并聲明了變量?
aextern int a; //只是聲明了有一個變量 a 存在,具體 a 在哪定義的扳抽,需要編譯器編譯的時候去找篡帕。
記錄2:函數(shù)也是類似,定義的時候同時聲明贸呢。但如果只是聲明镰烧,編譯器只知道有這么個函數(shù),具體函數(shù)怎么定義的要編譯器去找楞陷。
void fun1(); //函數(shù)聲明
void fun1(){ //函數(shù)定義
?cout<<"fun1"<< endl;
}