2015-10-06 55 views
0

我想知道什麼確實發生在編譯器級別時,我聲明一個變量/函數?我試着在網上找到它。但是我只能獲得有關聲明與定義之間區別的信息。當我在編譯器級聲明一個變量時會發生什麼?

+1

「在編譯器級別聲明變量/函數」請解釋它的含義。我所知道的任何語言都使用這樣的術語。也許一個例子會有所幫助。 –

+0

例如,extern int var表示我們正在聲明一個變量,而int var = 1表示我們正在定義它。現在我明白了,當我們定義一個意味着內存分配給它的變量。當我們聲明一個變量時,編譯器級會發生什麼? – AlienOnEarth

+1

@n.m .:你應該閱讀「什麼時候發生在編譯器級......」。 –

回答

2

編譯器進入可變定義行到適當範圍的符號表,其中包含的名稱,類型,改性劑,...

0

編譯器基本上保留的標識符,並注意到不同的特性,如數據類型,程序區域(範圍)的範圍,「已知」的位置以及其他屬性,例如生命週期,可訪問性,命名空間......此信息輸入到表中。

從此,在同一範圍內對該標識符的引用將根據該聲明進行解釋並檢查一致性。如果在使用標識符之前沒有看到任何聲明,編譯器將發出一條錯誤消息並自行嘗試定義,以便繼續進行編譯。

在程序的某個地方,必須定義相同的實體。除了聲明之外,定義將通過映射一些存儲空間來「體現」標識符併爲其分配一個初始值。鏈接器需要這些附加信息。如果缺失,編譯器將保持沉默,因爲程序在語法上是有效的。只有鏈接器會投訴。

相關問題