2011-10-31 61 views
2

最近我被分配了一個任務來提供我的C++代碼的C實現。由於原始代碼很大,並且主要依賴於C中不存在的結構,所以我不知道什麼是最簡單的轉移方式。在現有的C實現中促進C++的使用

我看到有包裝允許在C中使用C++嗎?這些將允許我簡單地 複製/粘貼在C代碼?

而且,我探討了以下 http://attractivechaos.wordpress.com/2008/09/19/c-array-vs-c-vector/

你對我怎麼可能會做沒有太多的工作任務的建議(顯然,因爲代碼已經寫好,只需要進行「轉讓」)?

+1

你還允許用C++編譯程序的某些部分,還是絕對只有純C代碼? –

回答

1

然後,您可以編寫一個使用內部句柄來使用對象和類的包裝庫。一個函數調用的方法中的對象可能是這樣的:那麼

extern "C" int classname_methodname(int handle, int param1); 

handle參數可以是一個指數爲vector<classname> internal_classname

在我上面的例子中,實際功能classname_methodname只是從矢量中獲取對象並用對象參數調用對象中的方法。

要創建對象實例,可以使用classname_create或類似的命名函數,該函數創建一個新實例,然後返回用於其他函數的句柄。

1

您可以將C++代碼封裝在C API中。

但是,它可能仍然依賴於C++庫。如果您的需求阻止使用C++庫,那麼將現有代碼封裝在C API中不會對您有所幫助。

+0

嘗試使用來自[link](http://www.g-truc.net/post-0235.html)的示例的包裝變體執行gcc -o source source.c後,出現以下錯誤:header .h:2:錯誤:期望的標識符或'('在字符串常量之前 - 可能是什麼問題? – user506901

+0

您的文件*與上述示例中的文件*相同嗎?如果不是,它們有何區別? –

+0

I copied再次執行:gcc -o source source.c我得到: 從source.c包含的文件中:1: header.h:2:錯誤:期望的標識符或'('在字符串常量之前 – user506901

0

此任務在很大程度上取決於您的邊界條件。其他海報定義了一個很好的方法來爲C++模塊提供一個C接口。

如果您絕對需要將您的代碼轉換爲純C,但可維護性不是問題,您可能會考慮編譯代碼,然後使用C反編譯器生成亂碼,將其作爲有效的C代碼編譯爲C模塊,相當於你的C++模塊。

+1

或者您可以將C++代碼轉換爲C:http://stackoverflow.com/questions/737257/code-convert-from-c-to-c/737272#737272 – rve