2014-04-20 60 views
0

我寫了一個C++庫來做一些數值分析。除了C++ API之外,是否還有一個編程優勢可將C API接口包含到庫中?C API應該包含在可分發的庫中嗎?

這不是適合的問題stackoverflow我可以刪除它。

+3

如果您的用戶將全部使用C工作。 –

+0

如果您不是唯一使用此庫的人,您可能需要提供C API [出於兼容性考慮](http:// stackoverflow .COM /問題/ 22797418 /如何-DO-I-安全通的對象,尤其是-STL對象到和從-A-DLL)。正如Matthieu的回答所說,在用與庫不同的編譯器或編譯器版本構建的程序中,不能安全地使用C++庫。 – computerfreaker

回答

0

不,沒有編程優勢來包含C API。

猜猜這是市場營銷和你的客戶想要什麼。

+0

如果有人想將你的庫連接到無法鏈接到C++ API的系統,例如Julia,Object Pascal,FORTRAN 77(以及沒有SWIG支持的地方) – rhody

+1

@rhody因此,「你的客戶需要什麼」答案。 – JBentley

+0

@rhody - 即「您的客戶需要什麼」! –

2

是的,有一個:如果你想從C代碼中調用你的函數,你需要一個C API。與可以通過C++代碼調用的C API(extern「C」{...})不同,C++ API不適用於C++代碼。

+0

另外,決定C API中額外間接的可接受性。如果您有C和C++接口,請考慮使C++類成爲C API的內聯調用方,而不是其他方式來避免間接方向。 (調整C++成員函數的調用約定與相應的C函數相同,僅作爲讀者的練習) – Deduplicator

4

什麼是C + C++:一個穩定的明確定義的ABI。

有多個C++ ABI(MSVC和Itanium是最重要的),每個標準庫實現(例如Dirkumware,libstd ++或libC++)與其他庫都不兼容。因此,C++代碼與C++代碼正確鏈接的唯一方法是使用相同的編譯器(或共享相同ABI的編譯器)編譯,並在相同的標準庫實現上進行編譯。但是,C是不同的。由gcc編譯的C與C編譯的clang順利集成......但它遠遠超出了。它能夠與C++,Python,Haskell,Java,Rust,Lua,Perl等平滑集成......大多數(如果不是所有的)「嚴肅」語言都可以或多或少順暢地與C進行交互。

那麼,C API相比C++有什麼好處呢?與幾乎所有陽光下的編程語言順利集成。

+0

在C中「包裝」C++ api是否有缺點,以便獲得兼容性並仍具有C++? – Brandon

相關問題