(转)C++的extern "C"
2013-07-28 10:40 虫虫与贝贝 阅读(249) 评论(0) 收藏 举报一、extern "C"的用法一
使用原则: 当在C++中引用C的函数或变量,在包含C头文件的时候应该使用extern "C"。
ps: C的函数或变量指的是通过gcc编译的c文件。
1.1 utils.h
#ifndef __utils_h__ #define __utils_h__
int add(int,int);
#endif
1.2 utils.c
#include"utils.h"
int add(int x,int y){
return x+y;
}
1.3 main.cpp
#include<iostream>
#ifdef __cplusplus
extern"C"{
#endif
#include"utils.h"
#ifdef __cplusplus
}
#endif
int main(int argc,char* argv[]){
std::cout <<"Hello World!!\n";int x =20;int y =40; std::cout << x <<" + "<< y <<" = "<< add(x, y)<<"\n";return0;}
# 标准的编译方式 $ gcc -c -Iinclude src/utils.c # 通过gcc编译c文件 $ g++ -Iinclude utils.o src/main.cpp # 通过g++编译c++文件# 非标准的编译方式 $ g++ -c -Iinclude src/utils.c # 使用g++编译c文件,会对函数名进行编码 $ g++ -Iinclude utils.o src/main.cpp # g++编译main.cpp时,由于包含extern "C"会编译# 不通过,如果想通过g++来编译c文件,extern "C"# 应该不添加
二、extern "C"的用法二
由于.c文件不支持extern "C",所以第二种用法就是使用.cpp编写c函数或变量
2.1 utils1.h
#ifndef __utils1_h__ #define __utils1_h__ int add1(int,int);
#endif
2.2 utils1.cpp
#ifdef __cplusplus extern"C"{
#endif
#include"utils1.h"
#ifdef __cplusplus
}
#endif
int add1(int x,int y){
return x+y;
}
2.3 main1.cpp
#include<iostream>
#ifdef __cplusplus
extern"C"{
#endif
#include"utils1.h"
#ifdef __cplusplus
}
#endif
int main(int argc,char* argv[]){
std::cout <<"Hello World!!\n";int x =20;int y =40; std::cout << x <<" + "<< y <<" = "<< add1(x, y)<<"\n";
return0;
}
$ g++ -Iinclude src/utils1.cpp src/main1.cpp # 在.cpp中编写c函数或变量时包含头文件时# 应该使用extern "C",然后统一使用g++# 进行编译
转自:http://blog.linguofeng.com/archive/2013/04/01/cpp-extern-c.html
浙公网安备 33010602011771号