① c語言變數初始化的方式
全局變數的初始化 對於不同編譯單位的全局變數,其初始化的順序沒有任何的保證,因此對不同編譯單位里的全局變數,在它們的初始化順序之間建立依賴性都是不明智的。 此外也沒辦法捕捉到全局變數初始化拋出的異常,一般來說要減少全局變數的使用,特別是限制那些要求復雜初始化的全局變數。
1,盡量不用全局變數
2,用靜態變數,通過訪問器進行訪問 例如:全局變數
int a = 5;
int b = a;
如果a,和b定義在同一個文件里,那沒什麼問題,結果b等於5.
如果a和b定義在不同文件里,就不能保證b也等於5,也就是說不能保證a先初始化. 事實上,除了在同一個文件定義的全局對象的初始化是按照定義次序來進行的之外,其他全局或靜態變數之間的初始化次序沒有任何保障。解決這種問題的方法是不直接使用全局變數,而改用一個包裝函數來訪問,例如
int get_a()
{
static int a = 5;
return a;
}
int get_b()
{
static int b = get_a();
return b;
}