[問題] global variable的問題

看板C_and_CPP作者 (真好多人)時間15年前 (2010/06/08 17:02), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/5 (看更多)
請問通常global variable會宣告在.cpp還是.h呢? 之前曾經將global variable寫在.h 但add Thread.cpp to project後compiler會出現warning訊息: (ex: in main.h declare int Variable = 0;) [Linker Warning] Public symbol '_Variable' defined in both module D:\TRP CODE\TRP 5.1\MAIN.OBJ and D:\TRP CODE\TRP 5.1\THREAD.OBJ 後來查了網路,發現要寫成 (in main.h) extern int Variable; (in main.cpp) int Variable = 0; 這樣子才不會有warning message產生,當中的原因是什麼呢? 還有若是我將原本在main.h的變數改成 static int Variable = 0; 也可以避免warning message產生,這又是為什麼呢? (可以請問將variable設static的意義是?) 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.97.143

06/09 01:04, , 1F
第一個問題,要先知道 #include 做了什麼事情
06/09 01:04, 1F

06/09 01:06, , 2F
第二個問題可找關鍵字「file scope」
06/09 01:06, 2F

06/09 01:08, , 3F
因為兩個unit都有Variable,看warning就知道了吧
06/09 01:08, 3F

06/09 01:10, , 4F
變成重複定義
06/09 01:10, 4F

06/09 01:11, , 5F
因為 extern int Variable 是宣告,
06/09 01:11, 5F

06/09 01:11, , 6F
int Variable = 0 是定義。
06/09 01:11, 6F

06/09 11:08, , 7F
正解是:不要用 XD
06/09 11:08, 7F
文章代碼(AID): #1C3dUCn4 (C_and_CPP)
文章代碼(AID): #1C3dUCn4 (C_and_CPP)