国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C/C++混合編程之extern “C”的使用示例

2020-01-26 13:55:32
字體:
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于C/C++混合編程extern “C”使用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。

首先要明白:

C++號稱是C語言的超集,也確實,從語言的基本語法上,C++是包含所有C語言的語法的,而且C++為了兼容C,連C語言的標(biāo)準(zhǔn)庫也被納入到C++的標(biāo)準(zhǔn)庫中,比如在C++中我們?nèi)匀豢梢允褂?code><stdio.h> ,它就是C++標(biāo)準(zhǔn)庫的一部分(注意最好用新的標(biāo)準(zhǔn)<cstdio> ,而不是老的<stdio> )。

但是,C++和C語言的編譯器在有些地方還是有差別的。比如,C++是支持面向?qū)ο蟮奶匦裕ūM管C++被稱為不徹底的面向?qū)ο笳Z言),面向?qū)ο缶鸵С趾瘮?shù)重載,而函數(shù)重載的實現(xiàn)和C++編譯器是分不開的。

比如有:

int max(int a, int b);

double max(double a,double b);

這兩個函數(shù)。

這兩個函數(shù)同時存在,在C語言中是不可以的,因為C語言不支持重載,但是在C++中完全沒有問題,因為C++是支持重載的。

那么為什么會這樣呢?

這要從編譯器的角度來看:

C編譯器將int max(int a,int b)函數(shù)編譯后,在符號庫中的名字為_max(不同編譯器可能有不同的形式)

C編譯器將double max(double a,double b)函數(shù)編譯后,在符號庫中的名字也為_max。所以在C語言中,這兩個函數(shù)是不能共存的的,編譯時會提示錯誤。

但是C++編譯器則不同

C++編譯器將int max(int a, int b)編譯后,在符號表中的名字為:

_max_int_int

而另一個則為_max_double_double。這兩者并不沖突。

這也是C++支持函數(shù)重載的根本原因。不過,這也從另一面說明了:函數(shù)重載其實不是多態(tài),頂多算是編譯時多態(tài)。

在C++和C混合編程時:

在C++和C語言混合編程時,前面已經(jīng)說過,C++的語法是完全包含C語言的語法的,所以不用擔(dān)心語法上出現(xiàn)什么問題。出現(xiàn)問題的主要原因在編譯和鏈接時。

思考這樣一件事情:

我們在Linux下編程的時候,經(jīng)常會用到內(nèi)核的庫,我們知道Linux內(nèi)核使用C語言寫的。如果這些庫采用了C語言的編譯器進行編譯,而我們的程序是用C++開發(fā)的,要用C++進行編譯,那么會出現(xiàn)什么問題?

比如:

我們有個.c文件p.c,內(nèi)容如下:

#include <stdio.h>void print(int a,int b){  printf("這里調(diào)用的是C語言的函數(shù):%d,%d/n",a,b);}

我們用gcc

主站蜘蛛池模板: 增城市| 剑川县| 济源市| 巴林右旗| 历史| 汝州市| 明溪县| 米易县| 通许县| 普宁市| 丰原市| 沧州市| 北辰区| 五大连池市| 安徽省| 阿荣旗| 南靖县| 西贡区| 邛崃市| 额敏县| 信阳市| 班玛县| 炎陵县| 普定县| 鞍山市| 湘潭县| 偃师市| 绥中县| 乌兰县| 白玉县| 沙田区| 巴东县| 东丰县| 吴堡县| 凌海市| 霍林郭勒市| 永福县| 宣恩县| 瑞昌市| 二连浩特市| 乌海市|