V2CE – C语言 | 每日基础(85)

读者:为什么调用 printf() 前, 必须要用 #include <stdio.h>?

阿一:为了把 printf() 的正确原型说明引入作用域。对于用可变参数的函数, 编译器可能用不同的调用次序。例如, 如果可变参数 的调用比固定参数的调用效率低。所以在调用可变参数的函数前, 它的原型说明 必须在作用域内, 编译器由此知道要用不定长调用机制。在原型说明中用省略号 “…” 来表示可变参数。

读者:为什么 %f 可以在 printf() 参数中, 同时表示 float 和 double?

阿一:参数默认晋级” 规则适用于在可变参数中的可变动部分: char 和 short int 晋级到 int, float 晋级到 double。同样的晋级也适用于在作用域中没有原型说明的函数调用, 即所谓的 “旧风格” 函数调用。所以 printf 的%f 格式总是得到 double。类似的, %c 总是得到 int, %hd 也是。

正文完