看板 C_and_CPP 關於我們 聯絡資訊
win10 compiler: Microchip xc8 In the header File: typedef union { uint8_t Bytes[4]; uint32_t Word; }BYTES_TO_WORD; extern BYTES_TO_WORD MyBytes; In the 'C' File with the declairation in it #include "commonheaderfile.h" BYTES_TO_WORD MyBytes; in other 'C' files #include "commonheaderfile.h" MyBytes.Word=123445677; 上述這樣是正常運作,結果我不小心在other 'C' file也下了BYTES_TO_WORD MyBytes; 編譯還是過,運作也沒問題,奇怪這樣不是重複定義? BYTES_TO_WORD MyBytes; 不就會給記憶體區塊了嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.7.85 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1564458186.A.ADE.html
KaryuuIssen: #1T4lSWmK07/30 11:46
anoymouse: 你貼的是變數的重複宣告而已 並沒有重複定義吧07/30 11:52
anoymouse: 變數只要沒賦值都只是宣告 可是union只要下了就是定義07/30 11:54
anoymouse: 還是我理解錯誤07/30 11:54
james732: 看起來跟我問的是同樣的問題 XD07/30 12:04
boss0405: 你如果第二個定義給不同的初始值就會報error了07/30 14:55
anoymouse: 我在之後的main裡面有給值 沒有error07/30 15:27
boss0405: 是給初始值喔,你兩個定義都沒給初始值是合法的07/30 16:34
anoymouse: 就是在定義的同時給初值才會掛?07/30 17:50
anoymouse: 可是沒給初值不就預設都0嗎?07/30 17:50
anoymouse: 剛剛試好像不會怎樣 等等再試試看07/30 17:57
boss0405: 稍微再確認一下,應該是要兩個同時都給初始值才會掛07/30 23:18
anoymouse: 好 明天會再確認 謝謝 07/30 23:49
※ 編輯: anoymouse (59.115.118.133 臺灣), 07/30/2019 23:50:32
anoymouse: 我剛剛用devC TDB-GCC 4.9.2試 大概就像你所說的要初始 07/31 09:26
anoymouse: 化 才會出現multi-definition 07/31 09:27
anoymouse: 但是我單晶片用的編譯器就不會有問題。 07/31 09:27
anoymouse: 但是如果不在宣告結構變數時就賦值,還是會給結構變數 07/31 10:02
anoymouse: 記憶體空間 然後成員內容會是0 07/31 10:02
anoymouse: 如果有extern 兩個c檔的同個結構變數就會是同一個記憶 07/31 10:03
anoymouse: 體空間 剛剛試的結果 07/31 10:04