Mix C and C++

来源:互联网 发布:拖延症 知乎 编辑:程序博客网 时间:2024/06/07 13:24

混合使用指南

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 __cplusplusextern "C" {#endifvoid 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编译器编译。因为标准库依赖的问题由动态链接库机制自动解决了,很方便。

0 0