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