聲明和定義是完全同的概念,聲明是告訴編譯器“這個函數或者變量可以在哪找到,它的模樣像什么”。而定義則是告訴編譯器,“在這里建立變量或函數”,並且為它們分配內存空間。
函數聲明與定義:
函數的聲明如:int Add(int, int);函數聲明就是給函數取名並指定函數的參數類型,返回值類型。值得注意的是,在C語言中,有一點跟C++不同,對於帶空參數表的函數如:int func();在C中代表可以帶任意參數(任意類型,任意數量),而在C++中代表不帶任何參數。
函數的定義如:int Add(int a, int b){} 函數定義看起來跟函數聲明很像,但是它有函數體,如果函數體中使用了參數,就必須為參數命名,這里大括號代替了分號的作用。
變量的聲明如:extern int i; 在變量定義前加extern關鍵字表示聲明一個變量但不定義它,這對函數同樣有效,如:extern int Add(int a, int b);因為沒有函數體,編譯器必會把它視作聲明而不是定義,extern關鍵字對於函數來說是多余的,可選的。
變量的定義如:int i;如果在此之前沒有對i的聲明,那么這里既是對它的聲明也是對它的定義,編譯器會為其分配對應的內存。