自学内容网 自学内容网

C语言为什么不支持函数重载

为什么C++支持函数重载,C语言不支持函数重载?

三个文件

对于以上三个文件:编译器编译文件的步骤:

  1. 预处理
    头文件展开、宏替换、条件编译、去掉注释,形成test.ifunc.i文件。其中func.i中包含函数的声明和定义,test.i中包含函数的声明和实际调用

  2. 编译
    检查语法,生成汇编代码形成test.sfunc.s

  3. 汇编
    将汇编代码转换成二进制的机器码,形成test.ofunc.o

  4. 链接
    合并到一起,链接没有确定的函数地址等等。如果函数只有声明没有定义,会有链接错误


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)!