回覆列表
  • 1 # 使用者8451710051916

    眾所周知,全域性變數在被定義後,系統會為全域性變數分配記憶體並且它還可以被其他模組透過C語言中extern關鍵字呼叫。這樣就必須在 xx.C 和xx.H 檔案中定義。這種重複的定義很容易導致錯誤。 下面是隻需用在標頭檔案中定義一次就可以在別的模組使用的定義方法。

    格式: 定義全域性宏。

    #ifdef xxx_GLOBALS

    #define xxx_EXT#else#define xxx_EXT extern

    #endif 上面位於.H 檔案中,每個全域性變數都加上了xxx_EXT的字首,xxx代表模組的名字。該模組的.C檔案中有以下定義:#define xxx_GLOBALS

    當編譯器處理.C檔案時,它強制xxx_EXT(在相應.H檔案中可以找到)為空,(因為xxx_GLOBALS已經定義)。所以編譯器給每個全域性變數分配記憶體空間,而當編譯器處理其他.C檔案時,xxx_GLOBAL沒有定義,xxx_EXT被定義為extern,這樣使用者就可以呼叫外部全域性變數。進階:在abc.H:#ifdef abc_GLOBALS

    #define abc_EXT#else

    #define abc_EXT extern#endif

    abc_EXT unsigned int Ctr;

    同時,abc.H有中以下定義:#define abc_GLOBALS

    當編譯器處理abc.C時,它使得標頭檔案變成如下所示,因為abc_EXT被設定為空。unsigned int Ctr;

    這樣編譯器就會將這些全域性變數分配在記憶體中。當編譯器處理其他.C檔案時,標頭檔案變成了如下的樣子,因為abc_GLOBAL沒有定義,所以abc_EXT被定義為extern。extern unsigned int Ctr;

    在這種情況下,不產生記憶體分配,而任何 .C檔案都可以使用這些變數。這樣的就只需在 .H 檔案中定義一次就可以了。

  • 中秋節和大豐收的關聯?
  • 怎樣才能玩到外服版的LOL(最好是美服)?