回答
翻譯單元不是「標題和源文件」。它可能包含一千個頭文件(還有一千個源文件)。
翻譯單元在被預處理後就是通常所說的「源文件」或「.cpp文件」。如果源文件#include
是其他文件,那麼這些文件的文本將被預處理器包含在翻譯單元中。 C和C++在這個問題上沒有區別。
如果我將我的類定義放在'.cpp'中,而不是使用'.h'來放置類聲明。我可以稱這個'.cpp'爲翻譯單位嗎? – user103214
是的,沒有頭文件的要求。 –
@ user974191:你應該使用頭文件來避免複製你的代碼。 '#include'機制允許你編寫一次並讓編譯器爲你複製它:這是一個代碼組織的問題,但與翻譯單元的概念沒有多大關係。 –
在預處理時,頭文件被添加到.cpp文件中,所以編譯器基本上正在處理一大段代碼,包含.cpp和所有.h文件,都是由「#include」添加的。
這是翻譯單元。
翻譯單元實際上就是源文件和頭文件通過預處理(它使用頭文件擴展源文件)和預編譯後獲得的內容。編譯器使用翻譯單元生成您在編譯器輸出目錄中看到的.obj文件。
- 預編譯(據我所知,沒有這樣的步驟) –
生成預編譯頭文件 - 在大型C++項目中很常見。 – ChrisBD
啊!我不會真的把它編成預編,但我現在明白了。至於常見......是和不是。我正在研究共享數百萬行代碼的項目,而最好的解決方案不是預編譯頭文件,而是在同一團隊(CCache)的開發人員之間共享生成的對象並分發構建。 –
這取決於你的意思「區別」。 C和C++ 對其進行了類似的定義:基本上,編譯源文件(因此,所有包含的頭文件,擴展的宏等)時編譯的所有內容。但這在兩種語言中並不是一回事; 之類的模板意味着翻譯單元不使用C表現不同 ++比C.(C++有一個定義規則,例如。)
可以通過一個定義規則在兩個.cpp文件中有兩個具有相同名稱的類定義嗎?謝謝。 – user103214
@ user974191只有它們包含完全相同的標記,並且所有符號都綁定到完全相同的東西。這就是爲什麼引入了未命名的命名空間的原因:將本地類放在一個未命名的命名空間中,並且它們的完全限定名稱是不同的;他們不再是同一個班級,因爲他們不再有相同的名字。 –
- 1. 跨C++翻譯單元初始化
- 2. 翻譯c/C++?
- 3. 由當前翻譯單元編譯的對象的名稱C
- 4. C++翻譯庫
- 5. 翻譯的VBScript C#
- 6. c訪問不同翻譯單元中的數據成員
- 7. c - > c#翻譯,工具
- 8. 翻譯C++/CLI爲C#
- 9. 翻譯C++結構,以C#
- 10. C++翻譯成目標-C
- 11. LLVM翻譯單元
- 12. 翻譯簡單的C代碼
- 13. C到MIPS翻譯
- 14. google翻譯Objective-C
- 15. C#翻譯輸入
- 16. C到MIPS翻譯
- 17. 翻譯僞成C++
- 18. 僞翻譯到C
- 19. Python翻譯爲C#
- 20. C有翻譯嗎?
- 21. 在C++中翻譯lambda表達式c#
- 22. C#等價的python maketrans和翻譯
- 23. C#ActionCommand:ICommand到VB.net的翻譯
- 24. C翻譯的雙重
- 25. C#作業的VB翻譯
- 26. C++到Java的翻譯
- 27. 從楓到C++的翻譯
- 28. C至Delphi的翻譯
- 29. C++ MVC模型viewmodel「翻譯」和繼承
- 30. C++代碼翻譯和名稱查詢
預處理的源文件是翻譯單元。 –
@KerrekSB難道不是答案嗎? – daramarak
@KerrekSB,代表帽? :) –