天天看點

C++與C的互相調用

C++調用C語言

extern “C”

  • C++調用C,指定部分按照c語言進行編譯
  • extern “C” {} 隻能由C++編譯器來進行解析

extern "C"的主要作用就是為了能夠正确實作C++代碼調用其他C語言代碼。加上extern "C"後,會訓示編譯器這部分代碼按C語言的進行編譯,而不是C++的。由于C++支援函數重載,是以編譯器編譯函數的過程中會将函數的參數類型也加到編譯後的代碼中,而不僅僅是函數名;而C語言并不支援函數重載,是以編譯C語言代碼的函數時不會帶上函數的參數類型,一般隻包括函數名。

用 途

  • 實作類C語言和C++語言的混合程式設計
test1.cpp

extern “C”//裡面的符号都是按照C規則生成的
{
	int sum(int a,int b);//若直接調用其符号産生不同
}

int main()
{
	sum(10,20);
}
           
test2.c


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

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-LnwmSciM-1616918507526)(C:\Users\11383\AppData\Roaming\Typora\typora-user-images\image-20210328154415675.png)]

C語言調用C++

C++與C的互相調用
test1.c

int sum(int a,int b);//若直接調用其符号産生不同
int main()
{
	sum(10,20);//sum *UND*
}
           
extern “C”  //1.将C++的源碼用extern進行編譯,但若别人不給你源碼呢?
{

test2.cpp
int sum(int a,int b)//sum_int_int *.text*
{
	return a+b;
}
}
           
#ifdef _cplusplus
extern "C"
{
#endif

code...........

#ifdef _cplusplus
}
#endif
           

但當C++語言以庫(看不到源碼)的方式提供給我們,我們如何進行C語言調用C++呢?

  • 萬能的中間件,此時當C語言調用C++時,需要為每一個函數都提供一個封裝
C++與C的互相調用

繼續閱讀