有时候在C++
工程中可能需要
将某些函数按照
C
的风格来编译
,
在函数前加
extern "C"
,意思是告诉编译器,
将该函数按照
C
语言规则来编译
。比如:
tcmalloc
是
google
用
C++
实现的一个项目,他提供
tcmallc()
和
tcfree 两个接口来使用,但如果是C
项目就没办法使用,那么他就使用
extern “C”
来解决。
C++调用C的库,它的用法:
#include<iostream>
// C++项目
// 告诉C++编译器,extern "C"{}里面的函数是C编译器编译的,链接的时候用C的函数名规则去找,就可以链接上
extern "C"
{
#include "../../lession4_plus/lession4_plus/stack.h"
}
int main()
{
isValid("{{}}");
return 0;
}
C++项目要C实现的DS的静态库,需要:
1.包含头文件;头文件需要放在extern "C"{}里面
2.在工程属性中配置静态库的目录和添加静态库
C调用C++的库,它的用法:
在c++的函数声明前需要加入extern "C"{},如下所示:
//C++静态库,就会按C的函数名修饰规则去处理以下函数
#ifdef _cplusplus //此处使用条件编译是防止C调用C++的头文件的时候,编译不通过,C语言编译器不认识externC,但是C++编译器认识
extern "C"
{
#endif
void StackInit(ST* ps);
void StackDestroy(ST* ps);
void StackPush(ST* ps, STDataType x);
void StackPop(ST* ps);
STDataType StackTop(ST* ps);
int StackSize(ST* ps);
bool StackEmpty(ST* ps);
bool isValid(char* s);
#ifdef _cplusplus
}
#endif // _cplusplus