1. 程式人生 > >多個cpp檔案如何定義全域性變數與常量

多個cpp檔案如何定義全域性變數與常量

寫比較複雜的c++程式碼時,我們往往會把程式碼分成幾個片段放在幾個不同的cpp檔案中,這就引發了關於全域性常量(如PI的共享)和全域性變數的宣告與定義問題。
假設我們有標頭檔案main.h和原始檔a.pp,b.pp;其中a.pp和b.pp都需要用到PI和一個全域性常量size.
那麼該如何定義呢?

如果定義在main.h中

// main.h
const int PI=3.1415926;
int size;

然後a.pp和b.pp分別包含main.h檔案,
結果是這樣會產生重複定義的問題,即使使用了預編譯(即#ifndef……#endif)也是如此!

這也是為什麼一般不建議在需要被多個原始檔包含的標頭檔案中定義的變數的原因。

解決的辦法是:利用extern關鍵字在一個頭檔案中宣告(常量需要宣告時即定義),然後在其他原始檔中宣告這個變數或常量,這樣就可以使用它們了。
例如:
a.pp

extern const int PI=3.1415926;
extern int size;

b.pp

extern const int PI;
extern int size;

注:若只有一個原始檔包含標頭檔案,是可以在標頭檔案中定義常量與全域性變數的,只包含一次標頭檔案是不會引起重複定義的情況的