C与C++混合编程

        这年头啊,面向对象简直漫天飞,连C语言都有面向对象版--C++。当然啦,这也不能怪谁,面向对象的思想还是比较接近自然思维习惯的,随着编程规模及逻辑思维要求不断提高的今天,还真是需要面向对象的想法。

        可问题来了,不少我们这样的工程师(还是有点实力的),习惯了C,对C++呢,也有那么一点感冒,所以啊,有时还真是需要将已有的C语言代码模块与C++语言代码模块相互链接,最快的办法就是将C语言代码当做C++语言来编译。但在许多情况下还是不得不使用C语言和C++语言进行编程。由于C语言和C++语言在函数的命名和调用方式均有不同,如果想在C++源码中调用C语言模块的函数,那就需要做一些特殊的声明了,如下:

        extern "C" int func();                    //声明fun为外部的C函数

        经过的声明处理,编译器就知道这个函数必须按照C语言的方式调用,从而为其生成相应的目标代码。当然啦,如果有很多,就丢到一起去声明吧:

        extern "C" {

                int func();

                void func2(int ,int);

        }

        如果你编程时间足够长,换句话说,就是经验足够丰富(嘿嘿,我还凑合吧),你就应该知道模块函数的接口通常都是放到头文件中去声明,这样就可以保证供多个源文件引用。那新的问题又来了,如果一个头文件既被C++源文件引用又被C源文件引用,则上述声明就出现了问题,因为C编译器不认识extern后的字符串 C。解决这个问题的方法就是在头文件加入如下代码,使之对C和C++编译器通用:

        #ifdef __cplusplus
        extern "C" {   //C编译器看不到这一行
        #endif
        int func1();
        void func2(int ,int);
        #ifdef __cplusplus  
       }     //C编译器看不到这一行
        #endif

        这里用到一个宏定义__cplusplus,如果是通过C编译器进行预处理,则它没有定义。只有用C++编译器进行预处理,则它有定义。这样就可以把代码分为两种情况进行编译,从而实现对C和C++编译器的通用性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值