5函数重载与C-C++相互调用
函数重载
什么是函数重载:一组函数,函数名相同,但参数类型或个数不同。
C++为什么支持函数重载,但C不支持
- 本质是编译器产生符号的规则不一样:C++代码产生函数符号,由函数名和参数列表类型组成;而C代码产生函数符号,仅由函数名组成。当链接时,会发生符号的重定义。
重载的注意点
-
重载的前提是几个函数在同一作用域下。
//下述情况下可以正确调用对应的函数 #include<cstring> #include<iostream> using namespace std; bool compare(int a, int b){ cout << "int" << endl; return (a>b); } bool compare(double a, double b){ cout << "double" << endl; return(a>b); } bool compare(const char * a, const char * b){ cout << "double" << endl; return strcmp(a, b); } int main(){ compare(1, 2); compare(1.0, 2.0); compare("aa", "vv"); return 0; }
//下述情况下无法正确调用对应的函数 #include<cstring> #include<iostream> using namespace std; bool compare(int a, int b){ cout << "int" << endl; return (a>b); } bool compare(double a, double b){ cout << "double" << endl; return(a>b); } bool compare(const char * a, const char * b){ cout << "double" << endl; return strcmp(a, b); } int main(){ bool compare(int, int);//当在局部声明了一个compare函数 compare(1, 2); //后续的所有compare函数在局部作用域即找到了可调用的函数,则不会继续向全局作用域寻找其他conpare函数 compare(1.0, 2.0); //会double强制类型转化int compare("aa", "vv"); //报错,无法强制类型转换 return 0; }
-
const和volitale修饰形参,怎么影响形参类型的? 待补坑
-
一组函数的函数名和参数相同,返回类型不同,则不算重载。
-
什么是多态:编译期的静态多态:包含重载;运行期的动态多态。编译时期,指令就确定要重载哪个函数。
C++和C之间如何互相调用
-
下述为C++主程序调用C函数
//C规则下,只依据函数名生成符号表 int sum(int a, int b){ //sum .text return a + b; }
//C++规则下,依据函数名与形参生成符号表 int sum(int a, int b); //sum_int_int "UND", 在链接时,无法匹配C中的符号sum int main(){ int ret = sum(10, 20); cout << "ret" << ret << endl; return 0; }
extern "C" //这里把C函数的声明加入extern C中 { int sum(int a, int b); //按照C编译生成符号表 sum “UND” } int main(){ int ret = sum(10, 20); cout << "ret" << ret << endl; return 0; }
-
同样,如果C主程序调用C++
extern "C" //cpp文件按照C编译 { int sum(int a, int b){ //sum .text return a + b; } }
int sum(int a, int b); //sum “UND” int main(){ int ret = sum(10, 20); cout << "ret" << ret << endl; return 0; }
-
经常写作
#ifdef __cplusplus //C++编译器内置的宏 extern "C"{ #endif //C++代码 #ifdef __cplusplus } #endif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架