我总是问自己这个问题,为什么 C 中的 printf() 被设计为接受任意数量的参数,这不是重载吗?如果是的话,纯结构化语言如何包含面向对象的语言概念,例如方法重载?
问问题
138 次
3 回答
7
这不是重载吗?
不,C 中没有重载。它被称为“可变参数函数”。
不,尽管它出现在 C++ 中并且没有出现在 C 中,但方法重载并不是一个面向对象的概念。它在非面向对象的相当古老的编程语言(例如 Prolog)中具有突出的特点。
于 2012-09-26T19:51:50.757 回答
2
它不是重载..任何采用可变数量参数的方法都称为可变参数函数。
wiki 上的可变参数方法
于 2012-09-26T19:52:05.657 回答
2
这称为可变参数(可变参数数),自 C 语言早期就存在。
这与重载无关。
从某种意义上说,它只是“一个开放的原型”,表达了原型并不总是像现在这样严格使用的事实。C在这个部门的灵活性源于参数传递的方式:参数的清理是调用者的责任,它可以知道他们在需要的时间占用了多少空间。
使用竞争调用约定(例如 Pascal 调用约定)时,类似的技术是不可能的(容易的)
于 2012-09-26T19:52:14.450 回答