2
A
回答
5
你可以宣佈在.h
文件:
extern const size_t SIZE_OF_MY_STRUCT;
而在.cpp
文件中定義SIZE_OF_MY_STRUCT
爲:
extern const size_t SIZE_OF_MY_STRUCT = sizeof(MyStruct);
所以,你會不會有一個函數調用的開銷。
5
在C++提供了效用函數:
extern "C" size_t ReturnSizeOfMyStruct(void) {
return sizeof(MyStruct);
}
然後調用它在C代碼:
extern size_t ReturnSizeOfMyStruct(void);
size_t howBig = ReturnSizeOfMyStruct();
1
如果struct
實際上是用C++特性(成員函數,private
/protected
/構造函數和/或析構函數繼承自另一個類/結構)[或者具有使用這些特性的成員],那麼你沒有太多選擇:
- 編寫一個返回大小的函數,該函數編譯爲C++,但調用約定爲
extern "C"
。 - 重組您的代碼,以便您不需要以其他方式在您的C代碼中使用sizeof(C++結構體)。
- 更改您的C代碼,使其與C++兼容並使用C++編譯器進行編譯。
在上面的主題中可能會有一些其他變體,但本質上,假設它是一個「C++結構」,不能用C編譯,你堅持用C++友好的方式修復它。顯然,如果C++結構沒有使用任何C++特性 - 它只是一個普通的舊數據,那麼解決方案顯然是將結構移出當前標題並將其放入可包含在標題中的標題C和C++。
相關問題
- 1. 將VB.net代碼與c#代碼混合
- 2. 反混淆C++源代碼
- 3. 混合Objective-C和C++代碼
- 4. 在C源代碼
- 5. 臂C代碼disasembly混亂,
- 6. 是否可以編譯c/C++混合源代碼?
- 7. 從WebBrowser獲取源代碼WPF C#
- 8. 發佈時混淆源代碼(C#)
- 9. 與Berkeley DB混合的C++/CLI代碼
- 10. 在混合C/Fortran代碼中捕獲浮點異常
- 11. 在代碼中在asp.net C中獲取sql錯誤代碼#
- 12. Objective-C源代碼
- 13. Google.Apis.Auth源代碼c#
- 14. C源代碼DLL
- 15. c#.net源代碼
- 16. C庫源代碼
- 17. 在Windows上用Visual Studio混合C#代碼和未被管理的C++代碼
- 18. 如何從C#中的網頁源代碼獲取圖像源代碼#
- 19. 在C源代碼中加密密碼
- 20. 測試C/C++源代碼
- 21. 在靜態庫中混合C&C++代碼
- 22. 混合使用C和C++代碼的產量在GCC
- 23. 在多個源代碼中將ObjC和C++與C++模板類混合使用
- 24. C++獲取國家代碼
- 25. 獲取源代碼。
- 26. 獲取源代碼
- 27. C++中的SetFileAttributeW源代碼
- 28. c代碼輸出混亂
- 29. 部分混淆C代碼
- 30. C代碼NOP混淆
將C源代碼重寫爲C++源代碼並使用C++編譯器進行編譯。 – pmg 2013-02-27 21:00:54
我認爲C++常見問題解答全稱是http://yosefk.com/c++fqa/mixing.html – 2013-02-27 21:05:27