我总是问自己这个问题,为什么在C中的printf()被设计为接受任意数量的参数,是不是表示重载?如果是,纯结构化语言如何包含面向对象的语言概念,如方法重载?
答案 0 :(得分:7)
不是重载吗?
不,C中没有超载。它被称为"variadic function"。
不,尽管它出现在C ++中并且缺少C语言,但方法重载并不是面向对象的概念。它在相当古老的编程语言中占据突出地位,例如Prolog,它不是面向对象的。
答案 1 :(得分:2)
它没有重载..任何采用可变数量参数的方法称为可变参数函数。
可变方法on wiki
答案 2 :(得分:2)
这称为varargs(可变参数的数量),自C早期就存在。
这与重载无关。
从某种意义上说,它只是'一个开放的原型',表达了原型并不像现在这样严格使用的事实。 C部门在这个部门的灵活性源于参数传递的方式:参数的清理是调用者的责任,调用者可以知道他们在所需时间占用了多少空间。
使用竞争调用约定(例如Pascal调用约定)
,类似的技术是不可能的(简单)