为什么C++支持函数重载,而C语言不支持?
编译一个可执行文件要经过:预编译,编译,汇编,链接这些阶段
原因就出在编译完之后的汇编阶段,因为在这里C++和C语言有所不同,C++会进行一个改名操作,而C语言不会:
C语言编译器编译之后:
名字和函数名保持一致。
C++编译器编译之后:
总结:
1.其实归根到底,还是因为C编译器和C++编译器对函数名的修饰不同。在gcc下的修饰规则是:【_Z+函数长度+函数名+类型首字母】。
2.这其实也告诉我们为什么函数的返回类型不同,不会构成函数重载,因为修饰规则并不会受返回值的影响。