2011-12-01 36 views
2

我有時必須將一些成熟的c源代碼轉換成類。有時出現的問題是一些函數共享全局變量。這通常很難找到。控制對C++全局作用域的訪問嗎?

我只是在想,如果有可能禁止一個類明確地使用全局範圍內的符號或類似的東西。有任何想法嗎?

編輯:

當然,我可以搜索所有全球varialbles並把它們轉化爲類成員,但可以是有點困難。如果源代碼有1000行,我無法查看所有代碼。我只是想知道,如果編譯器可以幫我找到它們。

+5

刪除全球範圍內的所有變量;在那一刻) – zerm

+1

保持,你正在寫的類,因此您可以在使用或不使用哪些變量控制 - 還等什麼問題是什麼? – Nim

+0

@zerm的建議並沒有那麼糟糕。但是不要刪除變量,只需逐個發表評論。然後,當你建立你會得到所有變量被引用的地方的錯誤,你可以更好地計劃在哪裏放置公共變量(提示:'命名空間'是你的朋友在這裏。) –

回答

2

您可以將所有全局變量放在namespace範圍內(可能大於1)。在此之後,編譯器將會抱怨前面的全局變量。就這樣去解決。

編輯:對於新問題,沒有沒有從編譯器工具,這將挑選出的全局變量。而且,查找全局變量很容易,不需要代碼審查或重組。這是一項機械工作。一旦找到它,請將其放在namespace範圍內。例如

int g_value; 

轉換,

namespace Globals { 
    int g_value; 
}; 
+1

絕對不止一個命名空間,否則它就像擁有全局變量一樣糟糕。 –

+1

@JoachimPileborg:其實我並不完全明白這一點。無論它的範圍如何,它仍然是全球性的,隨時隨地都可以訪問...... –