一、extern“C”的作用(最重點)
1. extern "C"的真實目的是實現類C和C++的混合編程。extern “C”是由C++提供的一個連接交換指定符號,用于告訴C++這段代碼是C函數。extern “C”后面的函數不使用的C++的名字修飾,而是用C。這是因為C++編譯后庫中函數名會變得很長,與C生成的不一致,造成C++不能直接調用C函數。
2.C++語言支持函數重載,C語言不支持函數重載。函數被C++編譯后在庫中的名字與C語言的不同。假設某個函數的原型為:void foo(int x, int y);該函數被C編譯器編譯后在庫中的名字為_foo,而C++編譯器則會產生像_foo_int_int之類的名字。C++提供了C連接交換指定符號extern“C”來解決名字匹配問題。
3.被extern "C"限定的函數或變量是extern類型的;extern是C/C++語言中表明函數和全局變量作用范圍(可見性)的關鍵字,該關鍵字告訴編譯器,其聲明的函數和變量可以在本模塊或其它模塊中使用。被extern "C"修飾的變量和函數是按照C語言方式編譯和連接的。
4.與extern對應的關鍵字是static,被它修飾的全局變量和函數只能在本模塊中使用。因此,一個函數或變量只可能被本模塊使用時,其不可能被extern “C”修飾。
二、extern“C”與__cplusplus
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
Cplusplus(C plus plus)即"C++",用于C++文檔的頭文件中,上面代碼的意思是:如果是C++文件(*.cpp)后綴,則使用extern “C”,在C++項目中應用的非常廣泛。即使用gcc編譯器編譯,函數名為C類型如_foo。個人認為,搞懂了這兩個關鍵字,尤其是理解extern "C"(再次強調,不為過,呵呵),接下來的混合編程也就差不多了,哈哈哈。。。。
三、C調用C++函數(接口)
1.設計程序,共四個文件
animal.cpp animal.h main.c Makefile
1.1 animal.h
[root@localhost CC++]#cat animal.h
#ifndef __ANIMAL_H__ //防止被重復包含
#define __ANIMAL_H__
#ifdef __cplusplus
extern "C" {
#endif
class ANIMAL{
public:
ANIMAL(char* );
~ANIMAL();
char* getname(void);
private:
char* name;
};
void print(void);
#ifdef __cplusplus
}
#endif
#endif // __ANIMAL_H__
1.2 animal.cpp:C++文件
[root@localhost CC++]#cat animal.cpp
#include "animal.h"
#include <iostream>
using namespace std;
ANIMAL::ANIMAL(char* data)//構造函數
{ name = new char[64];
strcpy(name, data);
}
ANIMAL::~ANIMAL() //析構函數
{
if(name)
{
delete[] name;
name = NULL;
}
}
char* ANIMAL::getname(void)
{ return name;
}
void print(void) //對外接口,而且必須有一個非類中方法,才能被C調用
{
ANIMAL animal("dog");
char* animal_name = animal.getname();
cout << "animal name is :" << animal_name << endl;
}
1.3 main.c:C文件
[root@localhost CC++]#cat main.c
int main(void)
{ print();
return 0;
}
1.4 Makefile
[root@localhost CC++]#cat Makefile
main:main.c animal.o
gcc -lstdc++ main.c animal.o -o main
animal.o:animal.h
g++ -c animal.cpp
.PHONY : clean
clean:
-rm animal.o main
2.測試
2.1生成可執行程序main
[root@localhost CC++]#make
g++ -c animal.cpp
gcc -lstdc++ main.c animal.o -o main
2.2運行可執行程序main
[root@localhost CC++]# ./main
animal name is :dog
四、C++調用C函數
應該這個比較簡單,我就不多寫了,就直接寫代碼。
共有三個文件:1.h 1.c main.cpp
[root@localhost aa]#cat 1.h
#ifndef _1__H_
#define _1__H_
extern void print(char* );
#endif
[root@localhost aa]#cat 1.c
#include <stdio.h>
#include "1.h"
void print(char* data)
{
printf("%s/n", data);
}
[root@localhost aa]#cat main.cpp
extern "C"{
#include "1.h"}
int main(void)
{
print(“hello,world/n”);
return 0;
}
gcc 亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女中文字幕|
成人黄色免费网站在线观看|
免费av在线一区|
91精品久久久久久久久久入口|
一区二区三区精品99久久|
国产一区av在线|
国产午夜精品全部视频在线播放|
韩国国内大量揄拍精品视频|
日韩美女写真福利在线观看|
国产亚洲人成网站在线观看|
亚洲欧美成人网|
九九久久精品一区|
岛国av一区二区在线在线观看|
欧美专区在线播放|
久久久综合av|
国产精品91久久久久久|
热99精品只有里视频精品|
色偷偷亚洲男人天堂|
在线电影欧美日韩一区二区私密|
国产91成人video|
中文字幕久久久|
欧美精品一区二区免费|
亚洲美女在线观看|
中文字幕视频在线免费欧美日韩综合在线看|
欧美性xxxxxxxxx|
久久亚洲电影天堂|
国产视频久久久久久久|
最近2019好看的中文字幕免费|
日韩精品高清在线观看|
国产欧美精品一区二区三区介绍|
亚洲国产欧美一区|
欧美视频精品一区|
国产日本欧美一区|
欧美高清性猛交|
亚洲欧洲在线播放|
亚洲日韩欧美视频|
91在线无精精品一区二区|
亚洲成人激情在线|
日韩中文字幕第一页|
最近2019中文字幕一页二页|
青青草一区二区|
欧美日韩色婷婷|
91免费人成网站在线观看18|
久久69精品久久久久久国产越南|
国内伊人久久久久久网站视频|
久久久亚洲天堂|
亚洲综合在线播放|
日韩在线资源网|
国产成人精品综合久久久|
亚洲天堂av在线免费观看|
欧美精品久久一区二区|
亚洲自拍欧美色图|
欧美性猛交xxxx黑人猛交|
色悠悠久久88|
国产精品激情av在线播放|
色婷婷av一区二区三区久久|
国内精品美女av在线播放|
日韩av第一页|
2018中文字幕一区二区三区|
日韩精品视频在线播放|
亚洲精品美女在线观看播放|
亚洲欧美日韩国产中文专区|
亚洲在线第一页|
欧美性xxxxxx|
欧美性受xxxx黑人猛交|
5252色成人免费视频|
亚洲国产99精品国自产|
亚洲国内精品视频|
青青青国产精品一区二区|
国产精品香蕉av|
亚洲一区亚洲二区亚洲三区|
最近2019中文字幕第三页视频|
国产精品h在线观看|
久久成人亚洲精品|
亚洲摸下面视频|
另类天堂视频在线观看|
九九热这里只有精品免费看|
91精品国产九九九久久久亚洲|
亚洲最大福利视频网|
亚洲图片在线综合|
国产欧美一区二区白浆黑人|
日本最新高清不卡中文字幕|
91精品久久久久久久久久久|
国产精品久久9|
九九视频这里只有精品|
欧美激情在线有限公司|
一本色道久久88综合亚洲精品ⅰ|
超碰精品一区二区三区乱码|
9.1国产丝袜在线观看|
国产精品视频久|
亚洲国产精品美女|
国产精品三级美女白浆呻吟|
欧美成年人视频|
这里只有精品久久|
日韩高清免费观看|
国产精品女主播视频|
欧美一区二区色|
成人av.网址在线网站|
中文字幕一区日韩电影|
日韩成人av在线播放|
亚洲精品美女在线|
久久久亚洲国产天美传媒修理工|
精品人伦一区二区三区蜜桃免费|
亚洲综合第一页|
国产精品入口日韩视频大尺度|
欧美激情视频在线免费观看 欧美视频免费一|
日韩av一区二区在线观看|
精品福利视频导航|
成人a在线视频|
国产在线拍偷自揄拍精品|
国产日韩欧美视频|
www.欧美三级电影.com|
久久久精品视频在线观看|
久久久久久久久国产精品|
欧美二区在线播放|
国产午夜精品免费一区二区三区|
国产精品美女www爽爽爽视频|
国产日韩欧美中文在线播放|
91av在线网站|
国产精品一区二区三区久久|
欧美国产精品日韩|
亚洲国产精久久久久久久|
成人av色在线观看|
国产精品久久久久久久av电影|
最近免费中文字幕视频2019|
成人观看高清在线观看免费|
欧美日韩亚洲高清|
亚洲性日韩精品一区二区|
精品国产一区二区三区四区在线观看|
亚洲欧美日韩国产精品|
亚洲男女性事视频|
尤物99国产成人精品视频|
午夜精品久久久久久久久久久久|
国产精品视频网址|
日本aⅴ大伊香蕉精品视频|
亚洲乱码av中文一区二区|
97精品久久久|
91色视频在线观看|
亚洲第一福利网站|
成人av番号网|
97视频在线免费观看|
欧美视频一二三|
日韩中文字幕网址|
精品亚洲一区二区三区在线播放|
中文字幕亚洲一区二区三区五十路|
成人免费福利在线|
亚洲美女av在线|
永久免费毛片在线播放不卡|
欧美亚洲国产成人精品|
欧美美最猛性xxxxxx|
97超碰蝌蚪网人人做人人爽|
在线观看欧美www|
91国内免费在线视频|
日韩视频免费大全中文字幕|
国内精品久久久久|
国产成人精品一区二区在线|
国产精品免费看久久久香蕉|
亚洲日韩中文字幕在线播放|
国产成人av在线播放|
国产午夜精品视频免费不卡69堂|
亚洲精品电影网在线观看|
黑人与娇小精品av专区|
亚洲成人精品在线|
国产成人精品免费久久久久|