我正在開發一個小型軟件項目,我希望將來能夠以開放源代碼的形式發佈這個項目,所以我希望收集有關這個問題目前被接受的最佳做法的意見。在單個頭文件或各自頭文件中定義全局變量(extern)會更好嗎?
應用程序本身是程序性的,不面向對象(也沒有必要對我來說,封裝在一個類中的渲染功能或事件處理函數),但某些方面的應用被很大程度上是面向對象的(比如嚴重依賴OO的腳本控制檯)。代碼的OO方面具有標準object.cpp
和object.h
文件。
對於程序部分,我將代碼拆分爲各種文件(例如main.cpp
,render.cpp
,events.cpp
),每個文件可能都有一些特定於該文件的全局變量。我也有相應的頭文件,定義了我想要從其他文件訪問的所有函數和變量(如extern
)。然後,當我需要從另一個源文件訪問該函數/變量時,我只需要#include
正確的頭文件。
我今天意識到我還可以有其他選擇:創建一個單獨的globals.h
頭文件,我可以在其中定義所有全局變量(如extern
),以及在特定源文件之外需要的函數。然後,我可以在所有源文件中使用這個文件(而不是像我現在這樣做的每個單獨的頭文件)。此外,使用這種方法,如果我需要將變量/函數推廣到全局(而不是本地),我可以將條目添加到頭文件中。
問題:它是一個更好的做法是使用一個相應的頭文件爲每一個.cpp
文件(並定義變量/函數我想在這些頭全局訪問),或者使用單頭文件來聲明所有全局可訪問的變量/函數?
另一種快速的更新,在全局的最(但不是所有)被用作這樣的,因爲我的應用程序是多線程的。
爲什麼標記爲「C」?決定一種語言。如果這是C++,「所有全局變量」必然引發一些反應。 –
我使用C++創建了程序,但它具有綁定到Lua和SDL(它們都用C編寫)。我也希望將這種做法擴展到我爲嵌入式系統編寫的另一個應用程序(C語言)。程序的主要流程是程序化的(沒有單例對象),所以我確實需要全局變量。 – Breakthrough
只需將'globals.h'中的所有全局變量聲明爲** extern **就不會給出它的定義。您應該至少在一個源文件中定義它們。否則,連接器會對** extern **變量的使用情況進行投訴。 – Mahesh