溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么調用C語言的代碼

發(fā)布時間:2021-02-01 11:39:34 來源:億速云 閱讀:129 作者:小新 欄目:編程語言

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

為什么要是用 extern "C"

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

void func(int age) {

}

void func(int age, int height) {

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

而在C語言中是沒有這個技術的,所以如果我們想要調用C語言開發(fā)的一些API,就需要使用 extern "C" 修飾C語言的函數聲明。

extern "C" 用法

直接在函數前面加上 extern "C" 關鍵字

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

如果有函數聲明與函數實現,要讓函數聲明被 extern "C" 修飾,函數實現可以不修飾

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

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

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

自定義C語言函數庫

但是我們每次使用C語言的API都用這個 extern "C" 修飾那是不是太麻煩了,那我們學會了怎么去使用 extern "C" ,我們可以在編寫C語言API庫的時候,直接使用這個來修飾,那么C++再去調用的時候就不用這么麻煩了,直接使用這個函數就可以了。

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

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

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

但是這么定義的話就會產生另一個問題,那么就是無法在C語言文件中調用這個庫

C++中怎么調用C語言的代碼 

因為在C語言中是沒有 extern "C"

這個關鍵字的。調用這個庫,就是直接把這個庫的文件代碼拷貝過來。例如:

#include <stdio.h>
#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));
}

那么我們就需要在定義這個sum庫的時候 加上一些約束規(guī)則 ,讓他在被C++調用的時候加上 extern "C" 關鍵字,在被C語言調用的時候去掉這個關鍵字。

//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文件實現
#include "sum.h"
int sum(int a, int b) {
	return a + b;
}

__cplusplus 這個宏是C++中 特有的 。它在加載C++文件的時候 會提前定義這個宏 ,所以我們只要 判斷文件中是否有這個宏 ,有的話就是C++在調用,沒有的話就是C語言,這樣就可以很好地解決了這個混合調用的問題。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C++中怎么調用C語言的代碼”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI