我想知道什麼確實發生在編譯器級別時,我聲明一個變量/函數?我試着在網上找到它。但是我只能獲得有關聲明與定義之間區別的信息。當我在編譯器級聲明一個變量時會發生什麼?
0
A
回答
2
編譯器進入可變定義行到適當範圍的符號表,其中包含的名稱,類型,改性劑,...
0
編譯器基本上保留的標識符,並注意到不同的特性,如數據類型,程序區域(範圍)的範圍,「已知」的位置以及其他屬性,例如生命週期,可訪問性,命名空間......此信息輸入到表中。
從此,在同一範圍內對該標識符的引用將根據該聲明進行解釋並檢查一致性。如果在使用標識符之前沒有看到任何聲明,編譯器將發出一條錯誤消息並自行嘗試定義,以便繼續進行編譯。
在程序的某個地方,必須定義相同的實體。除了聲明之外,定義將通過映射一些存儲空間來「體現」標識符併爲其分配一個初始值。鏈接器需要這些附加信息。如果缺失,編譯器將保持沉默,因爲程序在語法上是有效的。只有鏈接器會投訴。
相關問題
- 1. 當我編譯時會發生什麼?
- 2. 當我們聲明變量時,實際上編譯器會做些什麼?
- 3. 在Ruby中聲明變量時後臺會發生什麼?
- 4. 爲什麼編譯器說我沒有聲明我的變量?
- 5. 當我們在JavaScript中聲明Array(4)時會發生什麼?
- 6. 我的聲明會發生什麼?
- 7. 當我沒有正確聲明變量時,使VB編譯器發出警告
- 8. 當用一個方程聲明一個變量時,內存分配會發生什麼?
- 9. 當你聲明一個對象時堆上發生了什麼?
- 10. 當我們將2個值賦給同一個變量時會發生什麼?
- 11. 當聲明瞭$$ [object name]時會發生什麼?
- 12. 編譯器錯誤變量聲明
- 13. 當我回顯變量時,幕後會發生什麼?
- 14. 當實現父接口聲明一個嵌套接口時會發生什麼
- 15. 當你聲明一個具有空邊界的數組時會發生什麼
- 16. EXC_BAD_ACCESS當聲明一個變量時
- 17. 每當我聲明一個枚舉,它不會編譯
- 18. 當我告訴printf打印一個變量時會發生什麼?
- 19. 當我們拋出一個對象/變量來捕捉時會發生什麼?
- 20. 當我們在Javascript中重新聲明對象時會發生什麼?
- 21. 當你多次聲明同一個對象/變量時會發生什麼(新手)
- 22. 爲什麼編譯器會在上面的「if」語句中聲明的變量說「未聲明的標識符」?
- 23. 當變量超過32個時,寄存器會發生什麼變化?
- 24. 當你在JavaScript中的函數聲明中聲明.autoCurry()會發生什麼?
- 25. 當我在一個double中使用goto時會發生什麼?
- 26. 編譯時爲什麼我的變量報告爲「未聲明的標識符」?
- 27. 當我ping 127.0.0.1時會發生什麼
- 28. 編譯器聲稱變量不明確,不會運行
- 29. 爲什麼編譯器認爲這個變量是未聲明的?
- 30. 將一個Objective C對象轉換爲另一個時,編譯器級別會發生什麼
「在編譯器級別聲明變量/函數」請解釋它的含義。我所知道的任何語言都使用這樣的術語。也許一個例子會有所幫助。 –
例如,extern int var表示我們正在聲明一個變量,而int var = 1表示我們正在定義它。現在我明白了,當我們定義一個意味着內存分配給它的變量。當我們聲明一個變量時,編譯器級會發生什麼? – AlienOnEarth
@n.m .:你應該閱讀「什麼時候發生在編譯器級......」。 –