头文件标准格式

/*
    为什么标准头文件都有类似以下的结构?
*/


#ifndef _EXAMPLE_H_
    #define _EXAMPLE_H_

#ifdef __cplusplus      //__cplusplus是c++编译器内部定义的一个宏定义
extern "C"              //用c语言标准编译
{
#endif  //{

/*...*/ 

#ifdef __cplusplus
}
#endif  //}

#endif  //_EXAMPLE_H_ 
/*

标准答案讲解:

头文件中的编译宏   
    #ifndef _EXAMPLE_H_
    #define _EXAMPLE_H_
    #endif 
        的作用是防止被重复引用。 

    作为一种面向对象的语言,C++支持函数重载,
        而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。
        例如,假设某个函数的原型为:    
            void foo(int x, int y);   

    该函数被C编译器编译后在symbol库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。
        _foo_int_int这样的名字包含了函数名和函数参数数量及类型信息,
        C++就是靠这种机制来实现函数重载的。

    为了实现CC++的混合编程,C++提供了C连接交换指定符号extern "C"来解决名字匹配问题,
        函数声明前加上extern "C"后,则编译器就会按照C语言的方式将该函数编译为_foo,
        这样C语言中就可以调用C++的函数了。
这里写代码片

自己的见解

    总结基本在标准答案中,以后自己编程按照该模版来操作

    不同编译器,编译后的效果不一样,该写法兼容c/c++

    这样编写程序的由来:

    在c++编译环境下,要以用c语言方式编译代码
    可以使用下面的方式,extern "C" 块语句以c语言标准编译

    extern "C"
    {
        //c语言代码
    }

    但是上面的写法放在c环境下编译可能通过,可能报错,就是c++有的语法,关键字
        比如 classnew就编译不通过

    于是乎得用到c/c++共同的语法---条件编译,根据不同环境替换成不同的代码
        这样编译就ok

    而且__cplusplus是c++编译器内部定义的一个宏定义

    所以改造后

    #ifdef __cplusplus      //__cplusplus是c++编译器内部定义的一个宏定义
        extern "C"              //用c语言标准编译
        {
        #endif  //{

        //c code

        #ifdef __cplusplus
        }
        #endif  //}

    既能在c++也能在c环境下编译通过
        把要编写的c语言代码放入extern "C" 中 
        把要编写的C++代码放入
            #ifdef __cplusplus      
            //c++ code
            #endif  

        注意:这个只是头文件中
    这是条件编译一个应用,也是移植代码的典型实例,自己得好好掌握
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值