我有一个关于C99标准默认参数促销的问题。在这本书中的 “C程序设计 - 一种现代方法,第二版” 我读过:C99标准默认参数促销
参数转换:
[...]
1)编译器有在通话之前遇到了原型。
2)编译器在调用之前没有遇到过原型。编译器执行默认参数促销:(1)
float
参数转换为double
。 (2)执行积分促销,导致参数char
和short
转换为int
。 (在C99中,整数促销被执行。)
几行进一步示出了其中不存在函数原型或定义调用前一个例子。它被评论如下:
当然,更好的解决方案是在调用它之前提供
square
的原型。 在C99中,在没有首先提供函数的声明或定义的情况下调用square
是错误。
那两个草书句是不是相互矛盾呢?我的意思是,如果C99禁止在没有预先声明/定义的情况下调用函数,它如何确定这种函数调用中的促销?
@JonathanLeffler,谢谢:) – 2012-08-17 15:58:42