日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++还能混合编程

發(fā)布時(shí)間:2024/1/23 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++还能混合编程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是C/C++混合編程?

我們都知道C是一個(gè)結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)

對于C++,首要考慮的是如何構(gòu)造一個(gè)對象模型,讓這個(gè)模型能夠契合與之對應(yīng)的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制

那么什么是C/C++混合編程?實(shí)際上簡單點(diǎn)說C/C++混合編程就是在同一個(gè)工程中,在C函數(shù)中調(diào)用C++函數(shù)或者在C++的函數(shù)中能夠調(diào)用C函數(shù)的方法。

C/C++混合編程有什么用?

也許我們會有疑問,兩者主要的功能都不一樣,語法也不是完全相同,這不是沒事找事嗎?

實(shí)際在我們實(shí)際開發(fā)中,我們還是會用到的,比如C++語言支持函數(shù)重載,C語言不支持函數(shù)重載,那么在C工程中加入C++就有用處了。

另外,如果一個(gè)完整的工程是用C語言實(shí)現(xiàn)的,但是再進(jìn)行增改功能或者移植的時(shí)候,另一個(gè)工程師只會C++怎么辦?那么同樣,為了提高工作效率,還是各司其職,提供接口即可。

怎么實(shí)現(xiàn)C/C++混合編程?

C++ 可以看作是C語言的擴(kuò)展,它們調(diào)用的規(guī)則是相同的,但不同的編程語言都有自己的特性,混合使用時(shí)要處理全局命名約定、命令、參數(shù)傳遞、數(shù)據(jù)類型轉(zhuǎn)換、出錯(cuò)處理,以及兩種語言標(biāo)準(zhǔn)運(yùn)行時(shí)的庫的混合等等一系列的問題。

我們需要了解一下extern "C",我們在閱讀程序時(shí)經(jīng)常也會看到下面的代碼

#ifdef __cplusplus extern "C" { #endifvoid fun(void *, int);#ifdef __cplusplus } #endif

__cplusplus是在C++中特有的,__cplusplus其實(shí)就是C++,extern "C"是由C++提供的一個(gè)連接交換指定符號,目的是告訴C++這段代碼是C函數(shù)。請記住:extern "C"后面的函數(shù)不適用的C++的名字修飾,而是用C語言來修飾。

在C++中調(diào)用C

C 程序和 C++ 程序唯一的區(qū)別主要體現(xiàn)在函數(shù)名上: C語言使用的是簡單的參數(shù)名,不考慮參數(shù)的個(gè)數(shù)和類型,而C++中的函數(shù)總會將它的參數(shù)類型列表當(dāng)作函數(shù)名的一部分。因此C++程序提供一些特殊的功能可以直接表明調(diào)用C函數(shù)。

C函數(shù)實(shí)例如下:

/*helloworld.c*/ #include <stdio.h> void sayhello(char *str) {printf("hello world\n"); }

C++函數(shù)實(shí)例如下:

/*main.cpp*/ #include <iostream> using namespace std; extern "C" void sayhello(char *str); int main(int argc, char *argv[]) {sayhello("hello from cpp to c\n");return 0; }

在上述的代碼中,C++程序中它的聲明是extern "C", 那么如何編譯文件呢?可以使用下面的命令:

g++ -c main.cpp -o main.o gcc -c helloworld.c helloworld.o gcc main.o helloworld.o -lstdc++ -o main

使用的是gcc所以最后的鏈接過程中要指定C++庫,如果使用g++激活鏈接,那么就表示已經(jīng)指定了C++的庫。

extern "C"是指定編譯和鏈接的規(guī)約,并不會影響語義。如果在頭文件中聲明函數(shù),就要將整個(gè)頭文件都聲明為extern "C", 這是標(biāo)準(zhǔn)C++語法,展示如下:

extern "C" {int add(int a, int b);double div(double a, double b); };

在C中調(diào)用C++

在 C 程序中調(diào)用C++程序時(shí),C++程序提供的函數(shù)可以使用C語言的調(diào)用順序。

在C++程序中創(chuàng)建C函數(shù)實(shí)例如下:

/*helloworld.cpp*/ #include <iostream> using namespace std; extern "C" void sayhello(char *str); void sayhello(char *str) {cout << str << endl; }

C程序如下:

/*main.c*/ #include <stdio.h> int main(int argc, char *argv[]) {sayhello("hello form C to C++");return 0; }

編譯使用的命令:

g++ -c hello.cpp -o hello.o gcc -c main.c -o main.o gcc hello.o main.o -lstdc++ -o main

在C++程序中函數(shù)sayhello()仍然是C++的代碼,我們可以在函數(shù)中隨意創(chuàng)建和清除對象。如果在函數(shù)sayhello()內(nèi)部調(diào)用C函數(shù),還必須表明調(diào)用的函數(shù)為extern "C",否則編譯程序會認(rèn)定它為C++函數(shù),并且改變相應(yīng)的函數(shù)名。

總結(jié)

C和C++對函數(shù)的處理方式是不同的,extern "C" 是使C++能夠調(diào)用C的庫文件的一個(gè)常用手段,在實(shí)際中還是經(jīng)常用到的,如果要對編譯器使用C的方式來處理函數(shù)的話,那么extern "C"就大有作為了。

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的C/C++还能混合编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。