行为
在参数传递过程中,
char
和 short
被提升为int
/ unsigned int
float
被提升为double
发生情形
在参数的预期类型未知时,发生默认参数提升。
也就是说,当没有原型或参数是可变参数时。
背景/产生原因
在 1988 年之前的黑暗时代,经典的“K&R”C 中没有函数原型之类的东西,并且设置了默认参数提升,因为:
- (a) 本质上“免费”,因为将一个字节放入寄存器并不比将一个字放入寄存器中花费更多。
- (b)减少参数传递中的潜在错误。第二个原因从来没有完全解决它,这就是为什么在 ANSI C 中引入函数原型是 C 语言中最重要的变化。
参考
- C 函数调用中的默认参数提升
- 《Pointers On C》