1. 程式人生 > >C++多個檔案共享同一標頭檔案時全域性變數的宣告

C++多個檔案共享同一標頭檔案時全域性變數的宣告

前言

在編寫非小型程式時,僅僅用到函式進行模組化是不夠的,由於函式眾多,在一個或幾個檔案中完成程式會造成單個程式檔案過長。這樣一來,不知不覺中提高的模組間的耦合性,擴大了程式的修改時間。這時候將功能分散到更多的模組中就變得尤為重要了。

那麼,保持一個統一的結構,將不同檔案納入相同的一組檔案中,並可以保持使用便成為了第一個問題。將原來在一個檔案下的變數編寫成不同檔案都可以使用的變數就是我們需要解決的第二個問題。

通過活動前處理器塊來避免重複編譯

在檔案過多的情況下,由於每個程式都會包含自己的標頭檔案,在編譯過程中,很有可能一個頭檔案被包含了多次,這時,進行編譯會發生重複編譯的錯誤。

例如:有兩個子模組標頭檔案:funtion1.h 和funtion2.h
funtion1.h中包含的標頭檔案均是標準標頭檔案,如:iostream, vector 等
funtion2.h中除了標準標頭檔案還包括有:#include “funtion1.h”
這時,有一個檔案包含以上兩個標頭檔案,如:
main.cpp中有如下內容:
:#include < iostream>
:#include “funtion1.h”
:#include “funtion2.h”

由於funtion2.h中已經包含了funtion1.h在main.cpp中,又被包含了一次,這樣就發生了重複編譯的錯誤。由於重複包括標準標頭檔案不會導致這樣的錯誤,所以需要我們對自行編寫的標頭檔案進行特殊說明,如
funtion1.h 中:
:#ifndef H_funtion1
:#define H_funtion1
:#include < fstream>
:#include < iostream>
:#endif
加入是否被編譯的檢查,這樣的話就以避免重複編譯相同的檔案。

多個檔案共享同一變數

多檔案的組織

多個cpp檔案要想納入到同一個組織中,最簡單的方式是,同時包含一個自行編寫的標頭檔案,在這個標頭檔案中宣告各個檔案中要被其他檔案所使用的函式簽名,還有共用的變數。

共用的變數

函式的宣告(不是定義),必須同時滿足兩點不同的要求:

  1. 變數型別前面有extern的修飾詞。
  2. 沒有初始化,或賦初值。

我們首先要做的就是在這個共用的標頭檔案中宣告各個檔案間要共同使用的變數,如:
TotalHeader.h中

extern int a;
extern int b;

第二步,在其中一個檔案中的全域性位置定義變數,如:
funtion1.cpp中
:#inlcude “TotalHeader.h”
:#include …
int a = 0;
int b = 0;
void fun1(){

}

通過以上兩步就可以實現多個檔案中共享同一標頭檔案時的全域性變數宣告