真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中怎么調(diào)用C語(yǔ)言的代碼

這篇文章主要介紹了C++中怎么調(diào)用C語(yǔ)言的代碼,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出米林免費(fèi)做網(wǎng)站回饋大家。

為什么要是用 extern "C"

在進(jìn)行C++開(kāi)發(fā)的時(shí)候,由于C、C++編譯規(guī)則是不同的。C++編譯函數(shù)方法是 使用mangle的技術(shù)

void func(int age) {

}

void func(int age, int height) {

}
/*如果有這兩個(gè)函數(shù)要被調(diào)用,在C語(yǔ)言中函數(shù)重載是不允許的,那么在C++中為什么可以呢。
C++中就是使用了mangle技術(shù),對(duì)函數(shù)重載的函數(shù)名加上編譯器中自定義規(guī)則的表示符,編譯之后的函數(shù)名就會(huì)不一樣。
例如 func(int age) -> func_int(int age)
  func(int age, int height) -> func_int_int(int age, int height)
*/

而在C語(yǔ)言中是沒(méi)有這個(gè)技術(shù)的,所以如果我們想要調(diào)用C語(yǔ)言開(kāi)發(fā)的一些API,就需要使用 extern "C" 修飾C語(yǔ)言的函數(shù)聲明。

extern "C" 用法

直接在函數(shù)前面加上 extern "C" 關(guān)鍵字

extern "C" void fun() {
	printf("test");
}

如果有函數(shù)聲明與函數(shù)實(shí)現(xiàn),要讓函數(shù)聲明被 extern "C" 修飾,函數(shù)實(shí)現(xiàn)可以不修飾

extern "C" void func();
void func() {
	cout << "func()" << endl;
}

如果有多個(gè)函數(shù)要被 extern "C" 修飾,可以直接用{}包裹

extern "C" {
	void func();
	void func1();
}
void func() {
	cout << "func()" << endl;
}
void func1() {
	cout << "func1()" << endl;
}

自定義C語(yǔ)言函數(shù)庫(kù)

但是我們每次使用C語(yǔ)言的API都用這個(gè) extern "C" 修飾那是不是太麻煩了,那我們學(xué)會(huì)了怎么去使用 extern "C" ,我們可以在編寫(xiě)C語(yǔ)言API庫(kù)的時(shí)候,直接使用這個(gè)來(lái)修飾,那么C++再去調(diào)用的時(shí)候就不用這么麻煩了,直接使用這個(gè)函數(shù)就可以了。

//在sum.h文件中定義sum函數(shù)
extern "C" {
	int sum(int a, int b);
}

int sum(int a, int b) {
	return a + b;
}

//在main.cpp文件中包含這個(gè)庫(kù)文件之后就可以直接使用了
int main()
{
	cout << sum(1, 2) << endl;
	getchar();
}

但是這么定義的話就會(huì)產(chǎn)生另一個(gè)問(wèn)題,那么就是無(wú)法在C語(yǔ)言文件中調(diào)用這個(gè)庫(kù)

C++中怎么調(diào)用C語(yǔ)言的代碼 

因?yàn)樵贑語(yǔ)言中是沒(méi)有 extern "C"

這個(gè)關(guān)鍵字的。調(diào)用這個(gè)庫(kù),就是直接把這個(gè)庫(kù)的文件代碼拷貝過(guò)來(lái)。例如:

#include 
#include "sum.h"

extern "C" {
	int sum(int a, int b);
}

int sum(int a, int b) {
	return a + b;
}

void main() {
	printf("%d", sum(3, 4));
}

那么我們就需要在定義這個(gè)sum庫(kù)的時(shí)候 加上一些約束規(guī)則,讓他在被C++調(diào)用的時(shí)候加上 extern "C" 關(guān)鍵字,在被C語(yǔ)言調(diào)用的時(shí)候去掉這個(gè)關(guān)鍵字。

//sum.h文件聲明
#ifndef __SUM_H
#define __SUM_H

#ifdef __cplusplus
extern "C" {
#endif
 int sum(int a, int b);
#ifdef __cplusplus
}
#endif
#endif

//sum.c文件實(shí)現(xiàn)
#include "sum.h"
int sum(int a, int b) {
	return a + b;
}

__cplusplus 這個(gè)宏是C++中 特有的。它在加載C++文件的時(shí)候 會(huì)提前定義這個(gè)宏,所以我們只要 判斷文件中是否有這個(gè)宏,有的話就是C++在調(diào)用,沒(méi)有的話就是C語(yǔ)言,這樣就可以很好地解決了這個(gè)混合調(diào)用的問(wèn)題。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C++中怎么調(diào)用C語(yǔ)言的代碼”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!


當(dāng)前標(biāo)題:C++中怎么調(diào)用C語(yǔ)言的代碼
路徑分享:http://weahome.cn/article/jdcihh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部