目录
一、extern "C"是什么?
二、用法展示
1.创建静态库
2.在c++文件中调c的静态库代码
3.在C文件中调c++的静态库代码
总结
一、extern "C"是什么?
extern "C"是为了在c++中兼容c代码,表示extern "C"代码中是标准的c 语言代码,要用c的编译器来编译,而不是用c++的编译器来编译
二、用法展示 1.创建静态库创建一个空项目,我这里命名为DS,然后在属性>>常规中把配置类型改成静态库类型。于是就有了一个名为DS的静态库。
2.在c++文件中调c的静态库代码1.添加库目录,目录的路径是静态库中的Debug文件。
2.在附加依赖项中加入静态库名.lib,我这里就是DS.lib。注意用分号和原来的隔开。
3.包头文件,找到静态库中要用的头文件,用extern "C"{}包起来。告诉编译器,头文件中的代码是代码,要有c编译器。
3.在C文件中调c++的静态库代码1.vs的编译器配置同之前c++调c。
2.在c++库中头文件中的函数申明用extern "C"包一下
extern "C" { 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); }
3.但是这时还不能完成,头文件会在c项目中展开,但是extern不是c的语法,不能编译通过。于是我们要用条件编译简单处理一下,在c++中就有extern "C"。
#ifdef __cplusplus 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); #ifdef __cplusplus } #endif
也可以这么用,起到的效果是一样的,这样就完成了,这时运行c的项目就可以运行了。
#ifdef __cplusplus #define EXTEREN_C extern "C" #else #define EXTEREN_C #endif EXTEREN_C void StackInit(ST* ps); EXTEREN_C void StackDestroy(ST* ps); EXTEREN_C void StackPush(ST* ps, STDataType x); EXTEREN_C void StackPop(ST* ps); EXTEREN_C STDataType StackTop(ST* ps); EXTEREN_C int StackSize(ST* ps); EXTEREN_C bool StackEmpty(ST* ps);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)