2013-08-02 46 views

回答

7

extern關鍵字的意思是「聲明沒有定義」。換句話說,它是一種顯式聲明變量的方法,或者在沒有定義的情況下強制聲明。

因此,在file2中,您只是聲明瞭沒有定義的變量(沒有分配內存)。在file1中,您聲明並定義了一個類型爲integer的變量。在這裏您分配了內存BSS segment,因爲您有一個未初始化的全局(對於C)。

在C++中,全局變量存儲在每個進程數據區的中。聲明和定義之間


差異:

爲了理解變量是如何外部涉及到extern關鍵字,就必須知道定義和聲明一個變量之間的區別。

當定義一個變量時,編譯器爲該變量分配內存,並可能將其內容初始化爲某個值。當聲明變量時,編譯器要求將變量定義在別處。

該聲明通知編譯器該名稱和類型存在一個變量,但編譯器不需要爲它分配內存,因爲它是在別處分配的。

+0

那樣讓你extern變量,那麼你好Pierre,謝謝你的理解。但是和文件1一樣,var'a'是全局的,它將內存存儲到數據段中,所以它將在數據段中或者像棧中提到的那樣?我不清楚這一點。你能解釋一下嗎? – anand

+0

就你而言,它是在[BSS段](http://en.wikipedia.org/wiki/Data_segment)中,因爲它是一個初始化的全局變量。 –

+0

標準C++中沒有BSS段。 –

5

文件2已聲明整數類型變量a(記得沒有定義,即目前爲止沒有爲a分配內存)。我們可以根據需要多次執行此聲明。 檔案1 的整數類型變量已被聲明並定義。 (請記住,定義是聲明的超集)。這裏也分配了a的內存。

+0

Thanks @hitesh,你能告訴我哪個內存段內存將被分配?它會在數據段中,因爲它對於文件1是全局的嗎?如果我們不包括文件2中的文件1,如#include 那麼它會給出任何錯誤? – anand

+0

這會在編譯時引發錯誤。因爲var是聲明的,但沒有在任何地方定義如果你想在不包含'file1.h'的情況下工作,而不是像extern int a = 0;' –

相關問題