企业网站建设哪家,长沙做网站公司哪家,网站不能正常显示出现后台代码,html5搭建网页游戏#x1f3a5; 屿小夏 #xff1a; 个人主页 #x1f525;个人专栏 #xff1a; C入门到进阶 #x1f304; 莫道桑榆晚#xff0c;为霞尚满天#xff01; 文章目录 #x1f4d1;前言#x1f324;️函数重载☁️函数重载的概念☁️函数重载的作用☁️C支持函数重载的原理… 屿小夏 个人主页 个人专栏 C入门到进阶 莫道桑榆晚为霞尚满天 文章目录 前言️函数重载☁️函数重载的概念☁️函数重载的作用☁️C支持函数重载的原理 ️内联函数☁️内联函数的概念☁️内联函数的作用☁️内联函数的特性 ️全篇总结 前言
在上一篇文章中我们了解到了命名空间和缺省函数的存在以及C为什么要引入它们。本章将继续C在C语言上扩展出的语法以帮助大家快速入门。函数竟然还有内联的形式函数重载重载的是什么本篇文章都将会做讲解。
️函数重载
☁️函数重载的概念 是指在同一个作用域内可以有多个同名函数但它们的参数列表必须不同参数类型、参数个数或参数顺序不同 ☁️函数重载的作用
提高代码的可读性和可维护性通过使用相同的函数名来表示一组相关的功能可以使代码更加清晰和易于理解。简化函数调用不同的参数列表可以根据不同的情况选择合适的函数进行调用避免了编写大量的条件判断语句。提供更多的灵活性通过函数重载可以根据需要提供多种不同的函数实现满足不同的需求。
☁️C支持函数重载的原理
C支持函数重载但是C语言不支持函数重载这是为什么呢 在C/C中一个程序要运行起来需要经历以下几个阶段预处理、编译、汇编、链接 。 实际项目通常是由多个头文件和多个源文件构成当前a.cpp中调用了b.cpp中定义的Add函数时编译后链接前a.o的目标文件中没有Add的函数地址因为Add是在b.cpp中定义的所以Add的地址在b.o中。那么怎么办呢 链接阶段就是专门处理这种问题链接器看到a.o调用Add但是没有Add的地址就会到b.o的符号表中找Add的地址然后链接到一起。 链接时面对Add函数链接接器会使用哪个名字去找呢这里每个编译器都有自己的函数名修饰规则。
Windows下vs修饰规则过于复杂Linux下g修饰规则简单易懂下面使用g演示这个修饰后的名字。
C语言编译后函数名字的修饰没有发生改变。
C编译后函数名字的修饰发生改变编译器将函数参数类型信息添加到修改后的名字中。
以上我们可以看出gcc的函数修饰后名字不变。而g的函数修饰后变成【_Z函数长度函数名类型首字母】。
这里就理解了C语言没办法支持重载因为同名函数没办法区分。而C是通过函数修饰规则来区分只要参数不同修饰出来的名字就不一样就支持了重载。
如果两个函数函数名和参数是一样的返回值不同是不构成重载的因为调用时编译器没办法区分。
️内联函数
☁️内联函数的概念 内联函数是一种特殊的函数它在调用时会被直接展开而不是通过函数调用的方式进行执行。它通常被用来替代宏以提高代码的执行效率和可读性。 如果在上述函数前增加inline关键字将其改成内联函数在编译期间编译器会用函数体替换函数的调用.
☁️内联函数的作用
提高代码的执行效率由于内联函数在调用时会被直接展开避免了函数调用的开销可以减少函数调用的时间消耗。提高代码的可读性内联函数可以将一些简单的代码片段直接嵌入到调用处使代码更加紧凑和易于理解。
☁️内联函数的特性
函数体内的代码比较简单由于内联函数在调用时会被直接展开因此函数体内的代码应该比较简单避免展开后的代码过于庞大。函数体内不能有循环语句和递归调用由于内联函数在调用时会被直接展开如果函数体内有循环语句或递归调用展开后的代码可能会过于庞大影响代码的执行效率。函数声明和定义必须放在同一个文件中为了能够在调用处展开函数体编译器需要在调用处获得函数的定义因此函数的声明和定义必须放在同一个文件中。内联函数适用于频繁调用、代码量较小的函数由于内联函数在调用时会被直接展开因此适用于频繁调用、代码量较小的函数。对于代码量较大的函数由于展开后的代码可能会过于庞大可能会导致可执行文件的体积增大从而反而降低代码的执行效率。 ️全篇总结
本章我们知道了函数重载和内联函数的作用和特性使用他们在以后的使用场景出现的频率是很高的。
☁️ 好了由于篇幅有限,本章只讲解了两个点后面还有几个点后续会再出两篇文章看完这些你的c就算是入门啦! 看到这里了还不给博主留个 点赞收藏 ⭐️ 关注 ❤️ 拜托拜托这个真的很重要 你们的点赞就是博主更新最大的动力 有问题可以评论或者私信呢秒回哦。