→ azureblaze:1.每個include他的c檔都會有獨立一個互不影響的This 02/07 20:55
→ azureblaze:雖然名稱一樣但是他們還是個別的東西 02/07 20:56
→ azureblaze:2. linker要求global中一個名稱只能定義一次 02/07 20:57
→ azureblaze:沒加static就是定義在global中 02/07 20:58
→ linotwo:#include "XXX.h" 就相當於把 XXX.h 的內容複製到該位置 02/07 21:18
→ linotwo:static int This; 如果寫在 .h 就等於被複製到每個 .c 裡 02/07 21:19
推 gg1122:所以global static 沒用到 亂include 會複製N份記憶體吧? 02/07 22:31
→ diabloevagto:不會,你會發生重複定義就發生錯誤了 02/07 22:40
→ mozzan:那請問問題二呢?? 我試過在.h寫 int this; 會過 02/07 23:19
→ mozzan:int this = 0; 就不會過了,然後static int this =0;又過了 02/07 23:20
→ tjjh89017:this不是保留字嗎? 02/07 23:26
→ linotwo:this 在 C++ 才是保留字。 02/07 23:30
→ tjjh89017:soga(筆記 02/07 23:32
→ linotwo:你加了 = 0 (初始化全域變數) 會讓實體在編譯期就確定了 02/07 23:44
→ linotwo:每個 .o (.obj) 變成有各自的實體,造成 linker error 02/07 23:46
→ gg1122:剛測試 跟一樓說的一樣 同變數名稱可是是不同的東西 02/08 00:17
→ gg1122:這樣還是只佔一份?@@ 有點奇怪... 02/08 00:19
推 makuro:剛好有翻到這個網站 可以參考看看 02/08 01:55
→ makuro:在Global時使用:更改變數scope 這一段 02/08 01:56
→ makuro:應該是佔兩份才對 如果是同一份的話 static就失去意義了 02/08 01:58
→ makuro:另外,mo大,不管我用int a=0 或是int a 都是重複定義 02/08 02:02
→ makuro:我不確定是不是因為我是用c++的緣故,能否請教一下 02/08 02:04
→ makuro:你是怎麼做到的@@?? 02/08 02:04
推 makuro:~~我可以噓我自己了,改成用c的話,mo大說的對, 02/08 02:10
→ makuro:如果用c++ ,就都會是重複定義 02/08 02:10
→ mozzan:lin大,未初始化的會擺在.bss區,初始化的在data區 02/08 12:12
→ mozzan:我現在知道問題二是因為在.data區重複定義了This 02/08 12:13
→ mozzan:所以.bss區不會產生這樣的問題是為什麼阿?? 02/08 12:14
→ linotwo:google : c common symbol 02/08 13:08