第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.函数的重载必然发生在同一作用域中

posted @ 2019-11-03 14:40  人民广场的二道贩子  阅读(119)  评论(0编辑  收藏  举报