Mix C and C++
2016-12-20 16:36
155 查看
混合使用指南
https://isocpp.org/wiki/faq/mixing-c-and-cpp关于如何使用C和C++进行混合编程,上面的引文总结的非常全面。问题的关键在于C++编译器编译出来的函数的名称与C编译器所使用的规则是不同的(对于重载函数,我们使用时的名字是一样的,但是编译器编译出来的名字却是不同的)。如果想让使用C++编译器(如g++)编译出的函数能够让C编译器认识,我们需要告诉C++编译器函数名要使用C编译器的规则,方法是使用
extern "c"。通常为了使一个头文件更加通用,会这么写:
#ifndef HEADER_GUARDER_ #define HEADER_GUARDER_ #ifdef __cplusplus extern "C" { #endif void Foo(); void Bar(); #ifdef __cplusplus } #endif #endif
如果使用了c++编译器,那么头文件自动包含
extern "c"(因为c++编译器会定义宏__cplusplus),那么编译器会生成符合C语言规范的函数名。
混合方式:C++做成静态链接库,暴露一个头文件给C使用
我们将使用库的一方称为客户。那么这种方式,客户只能使用c++编译器编译,因为一些c++标准库gcc是找不到的。所以不推荐这种方式。混合方式:C++做成动态链接库,暴露一个头文件给C使用
http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html做成动态链接库libfoo.so, 客户使用该so时可以使用c编译器编译。因为标准库依赖的问题由动态链接库机制自动解决了,很方便。
相关文章推荐
- 五子棋c语言
- 32位模式下C/C++程序可用最大内存
- C语言线程池的实现
- realloc,c语言
- VC++学习笔记 4
- C++11初始化列表与参数列表的作用
- C语言函数
- C语言-结构体-1887 候选人得票统计
- C++构造函数/复制构造函数(超容易理解版)
- 【LeetCode-442】Find All Duplicates in an Array(C++)(
- C++关于引用的小知识
- C语言题目-结构体基础题
- c++ string转化为const unsigned char*
- C/C++ 基于 websocket 的前台及后台实时推送
- C++头文件的三种标准
- C++,原生bool
- c++ 析构函数的问题,_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
- C++函数声明后面加throw()的作用!
- C++ 位运算符
- c++ 和c语言库文件区别以及源文件