※ 引述《icetofux ()》之銘言:
: 在 Code::Blocks + GCC 下可以正常編譯並執行,但在codepad.org的線上編譯卻出現
: 錯誤訊息(紅字部分):
: error: ISO C++ prohibits anonymous structs
: compilation terminated due to -Wfatal-errors.
: 請問如果要避開這種錯誤且不改變上述存取方式,有可能做到嗎?
你要的這個功能
就如同錯誤訊息所講的
叫作 anonymous struct
目前並非C/C++的標準功能 (C++僅支援anonymous union)
gcc 是透過 extension 的方式支援這個功能
請見 http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html
: 問題2:
: 我使用 Code::Blocks + GCC 來印出InfoA、InfoB與InfoC中每個元素的在記憶體中的位
: 址,發現是連續的,且與Array相同(當然這是一定的,因為用了union),想請問我能確
: 信InfoA、InfoB與InfoC無論在怎麼樣的狀況下,都是會被安排在連續的記憶體位址嗎?
compiler 是有權力在 struct 內加入一些 padding 以符合 alignment
儘管在成員都是 char array 對大部份的 compiler 來說應該都是連續的
你可以用 #pragma pack 來要求 compiler 進行特定的 alignment
: 因為程式中我想以Obj.InfoA的方式存取,然後最後再以
: fstream.write(Obj.Array, 14);
: 的方式寫入外部檔案。
嗯,至少也把 14 改成 sizeof(Obj) 吧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163