亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

什么是C/C++接口庫

什么是C/C++接口庫

C++ C
斯蒂芬大帝 2019-04-10 06:05:13
什么是C/C++接口庫
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

接口庫是一種概念,主要看你說的是哪方面的了。C和C++都有自己的標準庫函數,有的人稱之為接口庫,但真正的接口庫概念并非如此。
真正接口庫的概念是源自于一個設計理念,就是接口與實現分離。簡單的講,假設有一個第三方庫叫A,我的應用使用了A,如果A不是接口與實現分離的話,那么只要A有一點變動,我的應用也需要重新編譯和生成。這樣的話,對于應用庫A的人來說就會很麻煩。所以,逐漸的程序設計開始向著接口與實現分離的方向發展了。這也是面向對象逐漸延伸出來的概念。

查看完整回答
反對 回復 2019-04-11
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

將 C++ 函數聲明為``extern "C"''(在你的 C++ 代碼里做這個聲明),然后調用它(在你的 C 或者 C++ 代碼里調用)。例如:
// C++ code:
extern "C" void f(int);
void f(int i)
{
// ...
}

然后,你可以這樣使用 f():
/* C code: */
void f(int);
void cc(int i)
{
f(i);
/* ... */
}

當然,這招只適用于非成員函數。如果你想要在 C 里調用成員函數(包括虛函數),則需要提供一個簡單的包裝(wrapper)。例如:
// C++ code:
class C
{
// ...
virtual double f(int);
};

extern "C" double call_C_f(C* p, int i) // wrapper function
{
return p->f(i);
}

然后,你就可以這樣調用 C::f():
/* C code: */
double call_C_f(struct C* p, int i);

void ccc(struct C* p, int i)
{
double d = call_C_f(p,i);
/* ... */
}

如果你想在 C 里調用重載函數,則必須提供不同名字的包裝,這樣才能被 C 代碼調用。例如:
// C++ code:
void f(int);
void f(double);

extern "C" void f_i(int i) { f(i); }
extern "C" void f_d(double d) { f(d); }

然后,你可以這樣使用每個重載的 f():
/* C code: */
void f_i(int);
void f_d(double);

void cccc(int i,double d)
{
f_i(i);
f_d(d);
/* ... */
}
注意,這些技巧也適用于在 C 里調用 C++ 類庫,即使你不能(或者不想)修改 C++ 頭文件。

 


查看完整回答
反對 回復 2019-04-11
  • 2 回答
  • 0 關注
  • 993 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號