我使用__attribute__((packed));
將struct
的項目存儲在內存中,因爲這對於一些低級開發至關重要。
由於__attribute__((packed));
是GCC特定的我不知道是否有類似的解決方案適用於所有ANSI/C89/C99/C11編譯器或至少其中一些。__attribute __((packed))like屬性not GCC具體
0
A
回答
3
沒有標準的方法來完成什麼__attribute__((packed))
。典型的解決方案是使用#ifdef
來處理不同的編譯器。你可以在這個SO post找到這個方法的一些解決方案,其中還包含了關於__attribute__((packed))
的Visual C++等價物的細節。或者,GCC supports the Windows struct packing pragmas,所以如果你只關心Windows和GCC,你可以使用Windows方法。
2
沒有支持功能來控制標準指定的結構佈局。標準只是說明這個方面是實現定義的。
因此,如果您確實需要控制佈局,則需要使用編譯器特定的功能。如果你能找到一種避免需要這樣做的方法,那將是更可取的。
相關問題
- 1. __attribute __((packed))and __attribute __((__ packed__))
- 2. gcc --- __attribute __((interrupt(irq)))
- 3. __attribute __((packed,aligned(n)))和__attribute __((aligned(n)))之間有什麼區別?
- 4. __attribute __((init_priority(X)))在GCC
- 5. __attribute __((packed))只有一個元素的結構
- 6. 忽略__attribute __((packed))在SWIG接口中始終安全嗎?
- 7. 阻止__attribute __((packed))進入ISO C/C++的是什麼?
- 8. gcc __attribute __((selectany))for linux的替代方案?
- 9. 具體5塊屬性
- 10. 在VBA記錄集的Filter屬性中使用NOT LIKE
- 11. GCC按位屬性
- 12. MySQL的:NOT LIKE
- 13. 「UPDATE WHERE NOT LIKE?」
- 14. Facebook likebox和like button not not
- 15. MySQL的NOT IN和NOT LIKE
- 16. Tumblr Like Button Not Working
- 17. gcc not win-builder
- 18. 爲什麼GCC的__attribute __((...))語法使用雙括號?
- 19. 爲什麼__attribute __((純))函數中的GCC強制參數爲const?
- 20. Facebook like button not loading
- 21. SQL SELECT WHERE NOT LIKE
- 22. facebook like button not work
- 23. MySQL的NOT LIKE NULL
- 24. 問題與NOT LIKE
- 25. like box is not working
- 26. __attribute __((__ interrupt__,no_auto_psv))做什麼?
- 27. C11 GCC threads.h not found?
- 28. 剿從GCC init_priority屬性
- 29. GCC熱屬性的語義
- 30. MySQL和PHP - 使用'LIKE'和'NOT LIKE'
簡單的回答:**沒有**。閱讀[標準](http://port70.net/~nsz/c/c11/n1570.html)。但是您可以使用條件編譯來創建適用於不同編譯器的代碼。 OTOH,問題更多**爲什麼**你想打包'struct'。如果是序列化,這可能是一個壞主意。 – Olaf
請注意,此類屬性可由[GCC](http://gcc.gnu.org/)和[Clang/LLVM](http://clang.llvm.org/) –
理解。請注意,使用'屬性打包'往往會妨礙效率 - 或者至少,您以時間效率爲代價交易(獲得)空間效率。如果你不經常訪問這些結構,它可能並不重要。如果你做了很多,它可能會。 –