變數的宣告有兩種情況:
一種是需要建立儲存空間的。例如:int a。在宣告的時候就已經建立了儲存空間。這種宣告是"定義性宣告(defining declaration)",即我們平時所說的「定義」。
另一種是不需要建立儲存空間的,只是告訴編譯器某變數已經在別處定義過了。例如:extern int a。其中,變數a是在別處定義的。這種宣告是"引用性宣告(referncing declaration)",即我們平時所說的「宣告」。
從廣義的角度來講,宣告中包含著定義,但是並非所有的宣告都是定義。即,定義性宣告既是定義又是宣告,而引用性宣告只是宣告。例如:int a。它既是宣告,同時又是定義。然而對於 extern int a 來講,它只是宣告不是定義。
一般的情況下我們常常這樣敘述,把建立空間的宣告稱之為」定義」,而把不需要建立儲存空間的稱之為」宣告」。很明顯這裡指的宣告是範圍比較窄的,也就是說引用性的宣告。
例子:int a; //定義性宣告,分配儲存空間,初值不確定
int b = 0; //定義性宣告,分配儲存空間,賦初值
extern int c; //引用性宣告,不分配儲存空間,只是告訴編譯器這個變數已經在別處定義過了
函式的定義和宣告也是一樣,定義需要分配儲存空間;宣告只是告訴編譯器這個函式已經在別處定義過了。
函式的定義和宣告比較好區分。有函式體的即為定義,不帶函式體即為宣告。
例子://宣告
double sqrt(double x);
//定義
double sqrt(double x)
(1)是否需要分配儲存空間。
(2)在乙個作用域中可以重複宣告,但不能重複定義。這是由(
1)決定的,可以重複幾次告訴編譯器某個變數、函式已經在別處定義了,但不能重複多次地讓編譯器為同乙個變數、函式分配不同的儲存空間。
區分c 中的宣告與定義
c 編碼過程中,我們經常談及 定義 和 宣告 二者是程式設計過程中的基本概念。我們需要使用乙個變數 型別 類 結構體 列舉 共用體 或者函式時,我們需要提前定義和宣告。定義和宣告的過程,就像我們向圖書館借閱書籍一般,需要先完成書籍的印刷,即創造出書籍,這是乙個定義的過程,有了書籍,我們需要到圖書館完...
區分宣告和定義
變數的宣告和定義之間的區別是我們在學習過程中往往容易忽略的問題 宣告 告訴編譯器 直譯器有這個變數存在,向程式表明變數的型別和名字。程式中變數可以宣告多次,但只能定義一次,不為該變數分配記憶體空間。否則程式如何用乙個變數名訪問多於乙個的儲存空間?定義 為變數分配儲存空間,還可以為變數指定初始值。在乙...
C 如何區分C 中的宣告與定義?
c 編碼過程中,我們經常談及 定義 和 宣告 二者是程式設計過程中的基本概念。我們需要使用乙個變數 型別 類 結構體 列舉 共用體 或者函式時,我們需要提前定義和宣告。定義和宣告的過程,就像我們向圖書館借閱書籍一般,需要先完成書籍的印刷,即創造出書籍,這是乙個定義的過程,有了書籍,我們需要到圖書館完...