一、重载与指针
1.函数重载遇到函数指针(需要考虑返回值类型)
将重载函数名赋值给函数指针时
1.1 根据重载规则挑选与函数指针参数列表一致的候选者
1.2 严格匹配候选者的函数类型与函数指针的函数类型
注意: 函数类型需要和函数指针所指向的类型完全一致
#include<stdio.h>
#include<string.h>
int func(int x)
{
return x;
}
int func(int a,int b)
{
return a+b;
}
int func(const char* s)
{
return strlen(s);
}
int main()
{
int c=0;
typedef int(*FUNC)(const char*);
FUNC p = func;
c=p("hello");
printf("%d\n",c);
return 0;
}
注意:
1.函数重载必然发生在同一个作用域里面
2.编译器需要用参数列表和函数类型进行函数选择
3.无法直接通过函数名得到重载函数的入口地址
二、C++与C相互调用
1. 实际工程中C++与C代码相互调用是不可避免的
2.C++编译器能兼容C语言编译方式
3.C++编译器会优先使用C++编译方式
4.extern关键字能强制C++编译器进行C方式编译
extern "C"
{
//do C-style compilation here
}
nm xx.o可以打印出符号表信息
三、如何保证一段C代码只会以C方式编译
解决方案:
__cplusplus是C++编译器内置的标准宏定义
__cplusplus的意义
确保C代码以统一的C方式编译成目标文件
#ifdef __cplusplus
extern "C"
{
#endif
// C-Style Complation
#ifdef __cplusplus
}
#endif