Q我听说您必须#include <stdio.h>在调用printf。这是为什么?
A这样,一个合适的原型printf就会在范围内。
编译器可能会为接受可变长度参数列表的函数使用不同的调用序列。(如果使用可变长度参数列表的调用效率低于固定长度的调用,它可能会这样做。)因此,当调用 varargs 函数时,必须有一个原型(使用省略号表示法“...'', 表示参数列表是可变长度的)在范围内,以便编译器知道使用 varargs 调用机制。
参考:ISO Sec. 6.3.2.2, Sec. 7.1.7
Rationale Sec. 3.3.2.2, Sec. 4.1.6
H&S Sec. 9.2.4 pp. 268-9, Sec. 9.6 pp. 275-6