解決靜態全域性變數初始化的相互依賴問題

2021-06-28 10:46:05 字數 1088 閱讀 7477

今天在專案中遇到乙個小眾的問題,由於不同類的static變數初始化之間存在著相互的依賴導致segment default。

為了描述問題本身,我用乙個簡單的例子來說明。如**所示類a中有乙個static的string變數a:
#ifndef a_h

#define a_h

#include class a

;#endif

同樣類b也有乙個static的string變數b

#ifndef b_h

#define b_h

#include class b

;#endif

在a.cpp中類a的static string的初始化需要用類b的string b變數。**如下:

#include "b.h"

#include "a.h"

std::string a::a=b::b;

在類b中對b進行初始化。**如下:
#include "b.h"

std::string b::b="helloworld";

然後在主函式中引用兩個string物件:
#include "a.h"

#include "b.h"

using namespace std;

int main()

;#endif

#ifndef b_h

#define b_h

#include class b

};#endif

#include "b.h"

#include "a.h"

std::string a::a=b::get_b();

於是無論編譯器鏈結順序如何,程式都能正常工作了。

因此寫**了的時候,一旦靜態變數之間存在相互依賴的可能就盡量寫在方法裡面避免不必要的麻煩。希望以上內容對你有幫助!

未初始化全域性變數

未初始化全域性變數,這名字就很直白,就是 c 程式中定義成全域性作用域而又沒有初始化的變數,我們知道這種變數在程式執行後是被自動初始化為 全0 的。編譯器編譯的時候會將這類變數收集起來集中放置到 bss 段中,這個段只記錄了段長,沒有實際上的內容 全是0,沒必要儲存 在程式被裝載時作業系統會為它分配...

關於未初始化全域性變數

前幾天發現未初始化全域性變數一些特性,後來在一篇部落格上發現有人說過這個問題 這是原博文位址 blog.csdn.net liuqiaoyu080512 article details 8455652 然後結合原博文,自己又做了幾個實驗 以下算是自己實驗一遍以後的總結 首先,自己曾經以為未初化的全域...

C語言全域性變數的初始化

本意是想定義乙個全域性結構體變數,並設定其成變數的值。typedef struct a t a t a a.a 1 error expected asm or attribute before token a.b 2 error expected asm or attribute before to...