天天看點

C語言中聲明和定義詳解 變量聲明和變量定義 如何清晰的區分變量聲明和定義 程式子產品化設計風格 示例程式

變量定義:用于為變量配置設定存儲空間,還可為變量指定初始值。程式中,變量有且僅有一個定義。

變量聲明:用于向程式表明變量的類型和名字。

定義也是聲明,extern聲明不是定義

定義也是聲明:當定義變量時我們聲明了它的類型和名字。 extern聲明不是定義:通過使用extern關鍵字聲明變量名而不定義它。 [注意] 變量在使用前就要被定義或者聲明。 在一個程式中,變量隻能定義一次,卻可以聲明多次。 定義配置設定存儲空間,而聲明不會。

1.extern告訴編譯器變量在其他地方定義了。

例如:

1

2

2.如果聲明有初始化式,就被當作定義,即使前面加了extern。

隻有當extern聲明位于函數外部時,才可以被初始化。

3.函數的聲明和定義差別比較簡單,帶有{ }的就是定義,否則就是聲明。

4.除非有extern關鍵字,否則都是變量的定義。

一般情況下頭檔案中隻放變量的聲明,因為頭檔案要被其他檔案包含(即#include),如果把定義放到頭檔案的話,就不能避免多次定義變量,c++不允許多次定義變量,一個程式中對指定變量的定義隻有一次,聲明可以無數次。

不過有三個例外,一下三中實體的定義也可放到頭檔案中。

這三個實體可以定義在多個源檔案中,隻要在每個源檔案中的定義相同。

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

C語言中聲明和定義詳解 變量聲明和變量定義 如何清晰的區分變量聲明和定義 程式子產品化設計風格 示例程式

在這個程式中,我們再函數外部定義了一個變量

注extern int a = 10;隻有當extern聲明位于函數外部時,才可以被初始化。

我們後面還會提到這個問題

在這個程式中,

int a;是個定義,但是未初始化,列印他的值式不确定的,是以編譯時會報未初始化的異常。

int b = 10; 是個定義,并且被正确初始化,列印b的值沒有問題。

C語言中聲明和定義詳解 變量聲明和變量定義 如何清晰的區分變量聲明和定義 程式子產品化設計風格 示例程式

但是是個聲明,如果要對c進行讀寫操作,而我們并沒有對c進行定義,是以文法檢查沒有問題,但是在連結時,連接配接器會找不到c的位址。

C語言中聲明和定義詳解 變量聲明和變量定義 如何清晰的區分變量聲明和定義 程式子產品化設計風格 示例程式

對于d再明顯不過了,前面我們提到過如果聲明有初始化式,就被當作定義,即使前面加了extern。但是隻有當extern聲明位于函數外部時,才可以被初始化。

現在這個定義很明顯被gcc編譯器認為是錯誤的。

C語言中聲明和定義詳解 變量聲明和變量定義 如何清晰的區分變量聲明和定義 程式子產品化設計風格 示例程式

轉自:http://blog.csdn.net/gatieme/article/details/50640424

繼續閱讀