C/C++混合编程

c++是兼容c语言的:c++中可以直接调用c语言库函数,
应该也要能够调用自己写的c语言函数,像这种在c++代码中
调用c语言函数的形式,称之为混合编程

用c开发的功能很多已经用c编译器编译成库文件了,
那么库文件中的函数名已经确定下来了(c语言编译器不会进行改名操作)
直接用c++代码去调用该库的某个函数,由于c++编译器的改名操作,
就会因为函数名字不匹配而导致失败.

例子:
sum.c
int sum(int x,int y)
{
    return x+y;
}
-------------------------------------------------
sum.h

#ifndef ....
#define ....
/*
    ......
*/
int sum(int x,int y);


#endif

打包成一个动态库文件
        libsum.so


        把库文件及头文件 给客户使用
        sum.h
        libsum.so

保证你的客户用c语言还是用c++语言进行开发时,
都能直接调用你这个库文件里面的函数


用c语言开发:
main.c

int main()
{
    int s = sum(10,20);
    printf("s=%d\n",s);
    return 0;
}



用c++语言开发:
main.cpp
int main()
{
    int s = sum(10,20); //进行改名操作 调用 _Z3sumii,而你的库文件中没有该函数->报错
    cout << "s=" << s << endl;
    return 0;
}


c++提供了一个关键字 :
extern "C" 称之为链接指示,告诉c++编译器,
用 extern "C"修饰的函数是用c语言编译器编译的,在调用时别改名

但是c语言编译器不认识 extern "C" 。

所以我们得区分到底是哪个编译器来进行编译:
如果是c++编译器,要使 extern "C" 功能生效
如果是c编译器,要屏蔽 extern "C"

c++编译器中定义了一个宏 __cplusplus,c语言编译器中没有这
个宏就可以利用这个特点来进行区别


#ifdef __cplusplus
extern "C"
        {
#endif


#ifdef __cplusplus
}
#endif

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值