我寫了一個C++庫來做一些數值分析。除了C++ API之外,是否還有一個編程優勢可將C API接口包含到庫中?C API應該包含在可分發的庫中嗎?
這不是適合的問題stackoverflow我可以刪除它。
我寫了一個C++庫來做一些數值分析。除了C++ API之外,是否還有一個編程優勢可將C API接口包含到庫中?C API應該包含在可分發的庫中嗎?
這不是適合的問題stackoverflow我可以刪除它。
是的,有一個:如果你想從C代碼中調用你的函數,你需要一個C API。與可以通過C++代碼調用的C API(extern「C」{...})不同,C++ API不適用於C++代碼。
另外,決定C API中額外間接的可接受性。如果您有C和C++接口,請考慮使C++類成爲C API的內聯調用方,而不是其他方式來避免間接方向。 (調整C++成員函數的調用約定與相應的C函數相同,僅作爲讀者的練習) – Deduplicator
什麼是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++有什麼好處呢?與幾乎所有陽光下的編程語言順利集成。
在C中「包裝」C++ api是否有缺點,以便獲得兼容性並仍具有C++? – Brandon
如果您的用戶將全部使用C工作。 –
如果您不是唯一使用此庫的人,您可能需要提供C API [出於兼容性考慮](http:// stackoverflow .COM /問題/ 22797418 /如何-DO-I-安全通的對象,尤其是-STL對象到和從-A-DLL)。正如Matthieu的回答所說,在用與庫不同的編譯器或編譯器版本構建的程序中,不能安全地使用C++庫。 – computerfreaker