2013-03-06 33 views
3

這包括三個問題鏈接:靜態,全局和多個翻譯單元

1)您究竟如何確定多個翻譯單元?當然,所有的源文件和頭文件都會「連接」在一起,否則你最終會得到代碼調用代碼,這些代碼不是該「程序」的一部分。翻譯單位不是一個程序嗎?

2)如何靜態對象/班,關於多個翻譯單位工作?如果不同翻譯單元中的幾個源文件包含一個可創建對象(擁有靜態數據成員)的頭文件,那麼每個翻譯單元是否會有單獨的靜態數據成員?

3)類似的問題2,做全局變量得到跨越多個翻譯單元共享(有點像我這表明他們只是一起編譯???獨立的程序 - )或做全局變量還是要採取....全球跨越所有翻譯單位?

+0

https://en.wikipedia.org/wiki/Linker_(computing)可能會幫助你。 – 2013-03-06 22:15:19

回答

6

1)每個源文件,連同它包含的頭文件,被稱爲翻譯單元。它被編譯成一個目標文件。鏈接器最後將所有的目標文件加入到最終的可執行文件中。 (簡體,而是給你一個基本的想法)

2)連接器將消除副本。

3)是,參見2)

1
  1. 不,它們每個被編譯成其隨後連接在一起的一個目標文件。

  2. 如果對象是聲明,但在頭,這是更好的做法沒有定義,那麼將只是定義(假設它其實是在一個源文件中定義的)一個對象,大家誰包括標題將有一個編程方式。

    static源文件中的對象將會在 看起來是全局範圍的情況下在 翻譯單元之外無法訪問。在任何類別或功能之外,static將範圍限制在翻譯單元的範圍內 。

  3. 非靜態範圍內的對象,是的,他們做的。

+0

關於1號,如果答案是「否」,那麼什麼是需要考慮一個「翻譯單位」混合內聯和靜態代碼時的目的是什麼? – user997112 2013-03-06 22:53:58