3

我总是问自己这个问题,为什么 C 中的 printf() 被设计为接受任意数量的参数,这不是重载吗?如果是的话,纯结构化语言如何包含面向对象的语言概念,例如方法重载?

4

3 回答 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 回答