定義和聲明


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM