1. 變量的定義、聲明
變量的聲明有兩種情況:
一種是需要建立存儲空間的。例如:int a。在聲明的時候就已經建立了存儲空間。這種聲明是"定義性聲明(defining declaration)",即我們平時所說的“定義”。
另一種是不需要建立存儲空間的,只是告訴編譯器某變量已經在別處定義過了。例如:extern int a。其中,變量a是在別處定義的。這種聲明是"引用性聲明(referncing declaration)",即我們平時所說的“聲明”。
從廣義的角度來講,聲明中包含着定義,但是並非所有的聲明都是定義。即,定義性聲明既是定義又是聲明,而引用性聲明只是聲明。例如:int a。它既是聲明,同時又是定義。然而對於 extern int a 來講,它只是聲明不是定義。
一般的情況下我們常常這樣敘述,把建立空間的聲明稱之為”定義”,而把不需要建立存儲空間的稱之為”聲明”。很明顯這里指的聲明是范圍比較窄的,也就是說引用性的聲明。
例子:
int a; //定義性聲明,分配存儲空間,初值不確定
int b = 0; //定義性聲明,分配存儲空間,賦初值
extern int c; //引用性聲明,不分配存儲空間,只是告訴編譯器這個變量已經在別處定義過了
2. 函數的定義、聲明
函數的定義和聲明也是一樣,定義需要分配存儲空間;聲明只是告訴編譯器這個函數已經在別處定義過了。
函數的定義和聲明比較好區分。有函數體的即為定義,不帶函數體即為聲明。
例子:
//聲明
double sqrt(double x);
//定義
double sqrt(double x)
{
return x*x;
}
3. 定義與聲明的區別
(1)是否需要分配存儲空間。
(2)在一個作用域中可以重復聲明,但不能重復定義。這是由(1)決定的,可以重復幾次告訴編譯器某個變量、函數已經在別處定義了,但不能重復多次地讓編譯器為同一個變量、函數分配不同的存儲空間。
————————————————
版權聲明:本文為CSDN博主「xiaoyusmile」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoyusmile/article/details/5420252