有没有理由说C99不支持函数重载?

时间:2009-08-21 23:25:53

标签: c c99 overloading

显然(至少根据gcc -std=c99)C99不支持函数重载。在C中不支持某些新功能的原因通常是向后兼容,但在这种情况下,我无法想到一个函数重载会破坏向后兼容性的情况。不包括这个基本功能背后的原因是什么?

3 个答案:

答案 0 :(得分:27)

答案 1 :(得分:19)

编译C源代码时,符号名称将保持不变。如果引入函数重载,则应提供名称修改技术以防止名称冲突。因此,与C ++一样,您将在已编译的二进制文件中生成机器生成的符号名称。

此外,C没有严格的打字功能。许多事情在C中可以隐含地相互转换。重载决策规则的复杂性可能会在这种语言中引入混淆。

答案 2 :(得分:6)

许多语言设计师,包括我在内,都认为功能重载与C隐式促销的结合会导致代码难以理解。有关证据,请查看有关C ++积累的知识体系。

一般而言,C99旨在成为与现有做法基本兼容的适度修订版。超载将是一个相当大的偏差。