2012-06-03 37 views
4

我有一個是越來越相當大的一個.cpp,併爲管理方便,我想它拆分成幾個文件。但是,有很多全局變量,我想避免管理不同文件中的一組extern聲明。有沒有辦法讓多個.cpp文件充當單個文件?實質上,我想要一種分割代碼的方式,而不需要編譯器識別分割。沒有代碼分割.cpp文件改變

+6

這聽起來像你需要重構你的設計,而不是簡單地分割源文件。 –

+0

你使用類編寫這個程序嗎?如果是:每個班級應該在不同的文件中。如果不是,請考慮使用類重寫它。 –

+1

它是用類編寫的,但是有大量全局變量存儲圖像資源(這是一個遊戲)。一個更好的設計會有一個數據結構持有對每個圖像的引用,將該結構傳遞給每個函數,並將正確的圖像編入索引? – akroy

回答

5

當然,你總是可以只#包括各種CPP-文件合併成一個主文件這是編譯器看到一個。儘管如此,這是一個非常糟糕的主意,並且最終會比正確重構文件更糟糕。

+1

採取點,重構代碼;謝謝! – akroy

+0

不客氣,祝你好運! :) – harald

5

有沒有辦法讓多個.cpp文件充當單個文件?

是的。這是#include的定義。當您使用#include文件時,您將替代#include指令對包含文件進行文本替換。因此,多個包含文件共同組成一個翻譯單元。

就你而言,將文件切成幾個位。完全這樣做 - 不要添加或減少任何文本行。不要添加標頭警衛或其他任何東西。您幾乎可以在任何方便的位置打破文件。限制是:中斷不能發生在註釋中,也不能發生在字符串中,並且它必須發生在邏輯行的末尾。

名稱按照一些約定將新創建的部分文件。它們不是完整的翻譯單元,所以不要將它們命名爲*.cpp。它們不是正確的頭文件,所以不要將它們命名爲*.h。相反,他們是部分完整的翻譯單位。也許你可以將它們命名爲*.pcpp

至於基名,選擇原來的文件名,有順序排列的後綴:MyProg01.pcppMyProg02.pcpp

最後,一系列的#include語句替換原來的文件:

#include "MyProg01.pcpp" 
#include "MyProg02.pcpp" 
#include "MyProg03.pcpp" 
+0

我承認我不在乎這個答案。不確定爲什麼,確切地說。不知何故,這似乎使C++習慣用法變得沉重。你真的寫這樣的代碼嗎?它如何爲你工作?難道它不可維護嗎? – thb

+2

不,我永遠不會寫這樣的代碼。我的代碼遵循典型的CPP慣例,這些慣例涉及標題中的內容以及CPP文件中的內容。但OP沒有要求最佳實踐。他問如何執行他已經選擇的不良做法。 –

1

儘管你可以在很多cpp文件中聲明全局變量集,但是當編譯器編譯每個文件時,每個文件都會得到一個單獨的實例,這些實例在組合時會失敗鏈接。

唯一的答案就是把所有的全局變量放在他們自己的文件中,然後剪切&將它們粘貼到包含extern聲明的頭文件中(這可以很容易地實現自動化,但是我發現使用箭頭鍵來粘貼'extern '在他們面前是快速和簡單的)。

您可以重構的一切,但往往其不值得(當你需要改變某些事情了其它原因除外)。

你可以嘗試分裂文件,然後使用編譯器來告訴你哪些全局是由每個新文件所需,並重新引入只是那些直接到每個文件中,保持真正的全局分開。

如果你不想這樣做,只是#包含的cpp文件。

+0

你有沒有運氣#including cpp文件?自然,預處理器會爲你做,如果你問它,但是看起來有些不自然。我問的原因是,幾年前,我曾經做過與Fortran 77中的建議相同的事情。這是一團糟。我一直認爲C++中通常不這樣做的原因正是爲了避免我在舊Fortran中看到的那種混亂。 – thb