C程序和C++程序之間的互相調(diào)用圖文教程
前言
我們都知道C和C++是兩種語言,C++兼容C。但是有時候我們用C++寫了一個程序,想使用C文件里的函數(shù)?;蛘呶覀冇肅語言寫了一個程序,想調(diào)用C++程序里的函數(shù)。會發(fā)現(xiàn)兩者不能互相調(diào)用,其實(shí)是可以的,這篇文章將會為你揭曉。
一、C++調(diào)用C
首先,我們先我們要有2個項(xiàng)目,一個項(xiàng)目以C++程序編譯,要調(diào)用的項(xiàng)目則是以C程序編譯的。
C++項(xiàng)目:

C程序項(xiàng)目:
需要頭文件,頭文件是提供給主程序包含的。

因?yàn)槭荂++調(diào)用C,而一個程序只有一個main函數(shù),所以C項(xiàng)目里是沒有main函數(shù)的。
生成靜態(tài)庫
然后,我們需要把C項(xiàng)目生成靜態(tài)庫。


點(diǎn)擊確定,然后編譯。


這個lib文件就是Print項(xiàng)目的靜態(tài)庫
包含頭文件
然后我們把生成的.lib文件和C程序的.h文件移到 C++程序下。

然后包含頭文件

添加依賴庫

把C程序生成的 .lib靜態(tài)庫添加進(jìn)去


extern
然后我們需要用extern 來修飾這個頭文件。
extern "C" //用C語言的方式編譯括號內(nèi)容
{
#include "Print.h"
}
int main()
{
Print();
return 0;
}然后我們運(yùn)行程序

這樣,就成功的使用 CPP程序調(diào)用C程序的內(nèi)容了
二、C調(diào)用C++
C調(diào)用和C++ , 和C++調(diào)用C,其實(shí)差不多。
我們把要調(diào)用的程序 改成C++程序

然后把主程序改成C程序

但此時問題了,C 語言里 沒有 extern "C"這個用法,這種用法放在C程序里會出錯,所以我們把它刪掉。
#define _CRT_SECURE_NO_WARNINGS 1
#include "Print.h"
int main()
{
Print();
return 0;
}然后 打印的內(nèi)容改成 is C++

因?yàn)镃PP程序和C語言程序?qū)瘮?shù)名的修飾不同,所以我們要用extern 來修飾C++程序里需要調(diào)用的函數(shù),

但此時問題又來了,.h的頭文件會在預(yù)處理的時候展開,但是C語言不認(rèn)識 extern “C”,所以我們可以這樣。
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
void Print();
#ifdef __cplusplus
}
#endif__cplusplus 是一個宏定義,只要在以C++程序編譯時,才會有。如果不是以C++程序編譯,那么就不會 展開 extern “C”。
然后我們就可以編譯了,生成的是C++程序的靜態(tài)庫

再把C++的靜態(tài)庫和Print.h 文件 移動到C程序目錄

主程序里也別忘了添加依賴庫


這樣我們就成功用 C程序調(diào)用了C++程序里的函數(shù)

總結(jié)
無論是C++調(diào)用C里面的函數(shù),還是C調(diào)用C++里的函數(shù)。本質(zhì)都是一樣的,唯一需要注意的是 C語言里面 沒有 extern “C” 這種用法。所以C++程序里需要保證,在以C++編譯時,變換成以C的方式編譯,也就是使用extern “C”。但同時,還需要避免當(dāng) .h文件在C文件中展開時, extern “C” 帶來的錯誤。
到此這篇關(guān)于C程序和C++程序之間的互相調(diào)用的文章就介紹到這了,更多相關(guān)C程序和C++互相調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++中的?Qt?StandardItemModel?數(shù)據(jù)模型應(yīng)用解析
QStandardItemModel?是標(biāo)準(zhǔn)的以項(xiàng)數(shù)據(jù)為單位的基于M/V模型的一種標(biāo)準(zhǔn)數(shù)據(jù)管理方式,本文給大家介紹C/C++中的?Qt?StandardItemModel?數(shù)據(jù)模型應(yīng)用解析,感興趣的朋友跟隨小編一起看看吧2021-12-12
C/C++?Qt?數(shù)據(jù)庫與TreeView組件綁定詳解
本篇文章主要介紹了QT數(shù)據(jù)庫與View組件的綁定,通過數(shù)據(jù)庫與組件關(guān)聯(lián)可實(shí)現(xiàn)動態(tài)展示數(shù)據(jù)庫中的表記錄。感興趣的小伙伴可以了解一下2021-12-12
C語言中進(jìn)行大小寫字母轉(zhuǎn)化的示例代碼
C語言標(biāo)準(zhǔn)庫中提供了用于大小寫轉(zhuǎn)換的函數(shù),使得這一操作變得簡單而高效,本文將詳細(xì)介紹如何在C語言中進(jìn)行大小寫字母的轉(zhuǎn)換,包括相關(guān)的函數(shù)和示例代碼,需要的朋友可以參考下2024-03-03

