为什么C中的printf()方法设计为接受任意数量的参数?

时间:2012-09-26 19:50:21

标签: c oop printf overloading

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

3 个答案:

答案 0 :(得分:7)

  

不是重载吗?

不,C中没有超载。它被称为"variadic function"

不,尽管它出现在C ++中并且缺少C语言,但方法重载并不是面向对象的概念。它在相当古老的编程语言中占据突出地位,例如Prolog,它不是面向对象的。

答案 1 :(得分:2)

它没有重载..任何采用可变数量参数的方法称为可变参数函数。

可变方法on wiki

答案 2 :(得分:2)

这称为varargs(可变参数的数量),自C早期就存在。

这与重载无关。

从某种意义上说,它只是'一个开放的原型',表达了原型并不像现在这样严格使用的事实。 C部门在这个部门的灵活性源于参数传递的方式:参数的清理是调用者的责任,调用者可以知道他们在所需时间占用了多少空间。

使用竞争调用约定(例如Pascal调用约定)

,类似的技术是不可能的(简单)