- Forums
- Resources
- About
- Groups
Close
C函数,C++函数两者混用是很常见的情况. 但是C, C++编译器对函数编译后的符号处理有所不同, 主要是因为C++支持函数重载引起的. 所以有几点需要特殊处理.
如果是C++函数调用C函数, 直接调用即可, 如果需要注意到namespace的问题, 可以在C函数之前增加::表示调用全局namespace中的函数.
如果是C函数调用C++函数, 情况复杂一点, 简单粗暴做法就是把所有代码用C++编译器来编译, 这样代码也不需要做特别的处理, 但是大多数情况, 这样不可行, 因为你拿到的已经是编译好的库文件. 这时候常用的做法就是:
#ifdef __cplusplus extern "C" { #endif //C++函数供C函数调用的声明 #ifdef __cplusplus } #endif
这两个条件编译macro是解决name mangling的关键所在. 下面看看例子.
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。