您的位置:首页 > 编程语言 > C语言/C++

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编译器编译。因为标准库依赖的问题由动态链接库机制自动解决了,很方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: