• 第9课.函数重载分析(下)


    1.重载与指针

    typedef int (*PFUNC)(int a);
    int c = 0;
    PFUNC p = func;
    c = p(1);        //which function to call
    

    第一个

    函数重载遇上函数指针
    将重载函数名赋值给函数指针时
    a.根据重载规则挑选与函数指针参数列表一直的候选者
    b.严格匹配候选者和函数类型与函数指针的函数类型。(不单单是函数名和参数列表来决定了)

    注意
    a.函数重载必然发生在同一个作用域中(c语言只有一个作用域:全局作用域;c++中不只一个作用域,还有类作用域,在其中都可以定于函数。你不可能这个作用域去调用另外一个作用域中的函数)
    2.c++和c相互调用

    c++直接编译c语言的源码是没有问题的,但是在工程中有些c代码已经不是源码了,已经被编译成了目标文件。即我们在工程中用到第三方的库,这些库是用c语言进行编译的。让c++也能够去编写c语言编译的库。
    a.目的是编译器能够兼容c语言的编译方式
    b.extern关键字能强制让c++编译器进行c方式的编译

    extern "C"
    {
        //do C-style compilation here
    }
    

    问题:如何保证一段c代码只会以c的方式被编译?

    __cplusplus是c++编译器内置的标准红定义。意义:确保c代码以统一的c方式被编译成目标文件。

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    // C-style Compilation
    
    #ifdef __cplusplus
    }
    #endif
    

    注意事项

    a.c++编译器不能以c的方式编译重载函数
    b.编译方式决定函数名被编译后的目标名
    1).c++编译方式将函数名和参数列表编译成目标名
    2).c编译方式只将函数名作为目标名进行编译

    c.函数的重载必然发生在同一作用域中

  • 相关阅读:
    Media所有参数汇总
    图片360度旋转实例
    HTML5 input date 移动端 IOS 不支持问题
    keyframes 放大缩小动画
    CSS font-size字体大小样式属性
    前端之路
    typeof操作符,返回数据类型Array.isArray()、Object.prototype.toString.call()
    响应式布局简单介绍
    mysql存储引擎
    html5 拖放学习
  • 原文地址:https://www.cnblogs.com/huangdengtao/p/11785516.html
Copyright © 2020-2023  润新知