我正在用C語言編寫一個(我的第一個)C++類,但是我只能通過在extern塊中聲明C函數來編譯C++。我的項目使用autotools;有什麼辦法可以自動化這個過程,所以我不必維護兩個頭文件?從C++使用自動工具使用C代碼
5
A
回答
3
是創建包裝的頭文件,其中包括像這樣的C頭文件...
//Wrapper.h
#ifdef __cplusplus
extern "C"
{
#include "Actual.h"
}
#else
#include "Actual.h"
#endif
//Use.cpp
#include "Wrapper.h"
int main()
{
return 0;
}
//Use.c
#include "Wrapper.h"
/*or #include "Actual.h" */
int main()
{
return 0;
}
15
用C代碼使用的extern塊的#ifdef中頭文件
的頭文件開始
#ifdef __cplusplus
extern "C" {
#endif
...並在頭文件的末尾
#ifdef __cplusplus
}
#endif
這樣,它將適用於包含在C和C++源中
1
使用C預處理器。做這樣的事情:
#ifdef __cplusplus
extern "C" {
#endif
// code goes here
#ifdef __cplusplus
}
#endif
1
我們在頭文件中的宏:
#ifdef __cplusplus
#define _crtn "C"
#else
#define _crtn
#endif
在頭文件
然後,我們可以使用_crtn
:
#include "croutine.h"
extern _crtn void MyFunction(...);
唯一的疑難雜症是確保在包含MyFunction實現的文件中包含包含MyFunction原型的頭文件,以便使用「C」鏈接進行編譯。
這和@ epatel的答案是一樣的,只是在一個頭文件中只需要醜陋的#ifdef
。
相關問題
- 1. 使用來自C#代碼的C庫
- 2. 使用maven2構建基於自動工具的C/C++包
- 3. 記錄從c#使用的C++/CLI庫代碼 - 最佳工具和實踐?
- 4. 使用C#代碼
- 5. 使用C代碼
- 6. 使用C#代碼
- 7. 任何使用Kdevelop自動縮進c/C++代碼的方法?
- 8. 使用工具在代碼
- 9. 使用git代碼工具
- 10. 代碼塊用Visual C++開發工具
- 11. 使用pythonnet從python調用C#代碼
- 12. fiddlercore使用C#從文件創建自動響應(代碼將不工作)
- 13. C++代碼分析工具
- 14. C#Reindent代碼工具
- 15. 從C++調用c代碼
- 16. 確定C++代碼使用的Win32 API版本的工具?
- 17. 的Emacs:使用自動工具使用flycheck的代碼庫和使
- 18. 使用C代碼啓動任務
- 19. ASP.net UpdatePanel動態使用C#代碼
- 20. 使用FontIcon字形從代碼(C#)
- 21. 如何從C代碼使用JNI
- 22. 使用ccache使用自動工具
- 23. 在C#代碼中自動插入xml註釋的工具
- 24. 尋找自動C代碼生成工具
- 25. 無法使用C#代碼
- 26. 使用C#代碼在JavaScript
- 27. 使用Microblaze的C代碼
- 28. 格式使用C#代碼
- 29. C代碼使用tar
- 30. 下載使用C#代碼
謝謝!非常感激。 – drkatz 2009-02-08 21:50:08
雖然這當然有效,但我認爲下面更高評價的答案更好 - 在實際頭文件中使用預處理器來聲明函數extern C。這樣,你可以在C和C++中以相同的方式包含頭文件,而不必擔心額外的「包裝器」頭文件。 – 2009-02-09 18:14:31