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