我有一個是越來越相當大的一個.cpp,併爲管理方便,我想它拆分成幾個文件。但是,有很多全局變量,我想避免管理不同文件中的一組extern聲明。有沒有辦法讓多個.cpp文件充當單個文件?實質上,我想要一種分割代碼的方式,而不需要編譯器識別分割。沒有代碼分割.cpp文件改變
回答
有沒有辦法讓多個.cpp文件充當單個文件?
是的。這是#include
的定義。當您使用#include
文件時,您將替代#include
指令對包含文件進行文本替換。因此,多個包含文件共同組成一個翻譯單元。
就你而言,將文件切成幾個位。完全這樣做 - 不要添加或減少任何文本行。不要添加標頭警衛或其他任何東西。您幾乎可以在任何方便的位置打破文件。限制是:中斷不能發生在註釋中,也不能發生在字符串中,並且它必須發生在邏輯行的末尾。
名稱按照一些約定將新創建的部分文件。它們不是完整的翻譯單元,所以不要將它們命名爲*.cpp
。它們不是正確的頭文件,所以不要將它們命名爲*.h
。相反,他們是部分完整的翻譯單位。也許你可以將它們命名爲*.pcpp
。
至於基名,選擇原來的文件名,有順序排列的後綴:MyProg01.pcpp
,MyProg02.pcpp
等
最後,一系列的#include
語句替換原來的文件:
#include "MyProg01.pcpp"
#include "MyProg02.pcpp"
#include "MyProg03.pcpp"
我承認我不在乎這個答案。不確定爲什麼,確切地說。不知何故,這似乎使C++習慣用法變得沉重。你真的寫這樣的代碼嗎?它如何爲你工作?難道它不可維護嗎? – thb
不,我永遠不會寫這樣的代碼。我的代碼遵循典型的CPP慣例,這些慣例涉及標題中的內容以及CPP文件中的內容。但OP沒有要求最佳實踐。他問如何執行他已經選擇的不良做法。 –
儘管你可以在很多cpp文件中聲明全局變量集,但是當編譯器編譯每個文件時,每個文件都會得到一個單獨的實例,這些實例在組合時會失敗鏈接。
唯一的答案就是把所有的全局變量放在他們自己的文件中,然後剪切&將它們粘貼到包含extern聲明的頭文件中(這可以很容易地實現自動化,但是我發現使用箭頭鍵來粘貼'extern '在他們面前是快速和簡單的)。
您可以重構的一切,但往往其不值得(當你需要改變某些事情了其它原因除外)。
你可以嘗試分裂文件,然後使用編譯器來告訴你哪些全局是由每個新文件所需,並重新引入只是那些直接到每個文件中,保持真正的全局分開。
如果你不想這樣做,只是#包含的cpp文件。
你有沒有運氣#including cpp文件?自然,預處理器會爲你做,如果你問它,但是看起來有些不自然。我問的原因是,幾年前,我曾經做過與Fortran 77中的建議相同的事情。這是一團糟。我一直認爲C++中通常不這樣做的原因正是爲了避免我在舊Fortran中看到的那種混亂。 – thb
- 1. .cpp文件中的代碼
- 2. 更改.cs文件代碼,但它並沒有真正改變
- 3. X代碼在#included CPP文件中沒有中斷
- 4. 分割我的代碼分割成多個文件在Python 3
- 5. 將類代碼分離爲頭文件和cpp文件
- 6. 需要覆蓋Windows默認文件分割符不改變Java代碼
- 7. 着色用CSS文本的信件,沒有改變HTML代碼
- 8. hadoop大文件沒有分割
- 9. PHP代碼並沒有改變
- 10. 回聲JavaScript沒有改變代碼
- 11. 將代碼放在.cpp文件
- 12. 由腳本(bash,cpp)分割文件 - 列中的數字
- 13. GWT,MVP,GIN,代碼分割?
- 14. visual studio 2012 cpp文件沒有鏈接
- 15. MongoDB的文件限制沒有分割文件
- 16. Django密碼沒有改變
- 17. 分割文件
- 18. 如何分析的CPP /彙編代碼
- 19. 無法運行從CPP代碼image_transport:`分割故障(核心轉儲)`
- 20. cpp代碼錯誤
- 21. 使用cpp代碼編輯文件而不創建新文件
- 22. 如何從代碼塊中的.cpp文件創建.exe文件?
- 23. 迭代文件,按模式分割
- 24. 分割文件名到定義變量
- 25. 分割.txt文件到數組變量
- 26. 分割多個文件中的角碼
- 27. 錯誤血管分支分割代碼
- 28. Xamarin C# - 在代碼的變化並沒有改變
- 29. 如何在不同的文件中分割C代碼
- 30. 如何處理在源代碼管理下分割文件?
這聽起來像你需要重構你的設計,而不是簡單地分割源文件。 –
你使用類編寫這個程序嗎?如果是:每個班級應該在不同的文件中。如果不是,請考慮使用類重寫它。 –
它是用類編寫的,但是有大量全局變量存儲圖像資源(這是一個遊戲)。一個更好的設計會有一個數據結構持有對每個圖像的引用,將該結構傳遞給每個函數,並將正確的圖像編入索引? – akroy