C语言为什么不支持函数重载
为什么C++支持函数重载,C语言不支持函数重载?
对于以上三个文件:编译器编译文件的步骤:
-
预处理
头文件展开、宏替换、条件编译、去掉注释,形成test.i
和func.i
文件。其中func.i
中包含函数的声明和定义,test.i
中包含函数的声明和实际调用 -
编译
检查语法,生成汇编代码形成test.s
和func.s
-
汇编
将汇编代码转换成二进制的机器码,形成test.o
和func.o
-
链接
合并到一起,链接没有确定的函数地址等等。如果函数只有声明没有定义,会有链接错误
C语言链接函数地址时,就用函数名去找。
Linux下C++函数名的修饰规则:
_Z 函数名字符个数 函数名 参数首字母
例如代码中的
void func(char b, int a)
:_Z4funcci
void func(int a, char b)
:_Z4funcic
在链接时,会用_Z4funcci
和_Z4funcic
修饰后的函数名去找,如下图:
如果函数参数中包含结构体,也会用类似的方式表示出来,用来唯一标识函数名。
C语言链接时会用函数名去寻找函数的地址,而C++中链接时会用修饰后的函数名寻找,所以C++支持函数重载,C语言不支持
原文地址:https://blog.csdn.net/m0_74357404/article/details/143671475
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!