第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C代碼中使用C ++庫

在C代碼中使用C ++庫

C++ C
烙印99 2019-10-06 12:57:25
我有一個C ++庫,其中提供了用于管理數(shù)據(jù)的各種類。我有該庫的源代碼。我想擴(kuò)展C ++ API以支持C函數(shù)調(diào)用,以便該庫可以與C代碼和C ++代碼同時使用。我正在使用GNU工具鏈(gcc,glibc等),因此語言和體系結(jié)構(gòu)支持不是問題。有什么原因?qū)е逻@在技術(shù)上是不可能的?我需要注意任何陷阱嗎?是否有與此相關(guān)的資源,示例代碼和/或文檔?我發(fā)現(xiàn)的其他一些內(nèi)容:使用以下代碼包裝C代碼需要使用的C ++標(biāo)頭。#ifdef __cplusplusextern "C" {  #endif  //  // Code goes here ...  //  #ifdef __cplusplus  } // extern "C"  #endif將“真實(shí)的” C ++接口保留在C不包含的單獨(dú)的頭文件中。在這里考慮PIMPL原理。#ifndef __cplusplus #error在這里使用東西有助于發(fā)現(xiàn)任何瘋狂。小心C ++標(biāo)識符作為C代碼中的名稱C和C ++編譯器之間的枚舉大小不同。如果您使用的是GNU工具鏈,則可能不是問題,但仍要當(dāng)心。對于結(jié)構(gòu),請遵循以下格式,以免C混淆。typedef struct X { ... } X然后使用指針傳遞C ++對象,只需要在C中將它們聲明為struct X,其中X是C ++對象。所有這些都是由一位C ++向?qū)У呐笥烟峁┑摹?
查看完整描述

4 回答

?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊

C ++ FAQ Lite:“如何混合C和C ++代碼”。


這些問題的答案描述了一些陷阱:


[32.8]如何將C ++類的對象傳遞給C函數(shù)或從C函數(shù)傳遞?

[32.9]我的C函數(shù)可以直接訪問C ++類的對象中的數(shù)據(jù)嗎?


查看完整回答
反對 回復(fù) 2019-10-06
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊

主要陷阱:C語言無法捕獲異常。如果C ++代碼中可能出現(xiàn)異常,請非常小心地編寫C代碼或C ++包裝器。相反,C語言中的異常機(jī)制(如longjump)(在各種腳本語言中可以找到)不需要為堆棧上的C ++對象調(diào)用析構(gòu)函數(shù)。


查看完整回答
反對 回復(fù) 2019-10-06
?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗 獲得超5個贊

您可以混合使用C / C ++代碼。如果您的main()函數(shù)使用C ++編寫,則只需確保聲明了c函數(shù)


extern "C"

如果您的main是C,那么除了靜態(tài)變量外,您可能還可以。任何帶有靜態(tài)變量的構(gòu)造函數(shù)都應(yīng)在main()開始之前調(diào)用。如果C是您的主要角色,則不會發(fā)生這種情況。我有很多靜態(tài)變量,最好的辦法是用單例替換靜態(tài)變量。


查看完整回答
反對 回復(fù) 2019-10-06
  • 4 回答
  • 0 關(guān)注
  • 472 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號