天天看點

C/C++ 聲明與定義

變量的定義(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是聲明,但總不能說重複聲明吧,再說聲明是可以多次的,是以這裡提示的‘定義’非我們上面提到的‘定義’。