我对 C99 标准中的默认参数提升有疑问。在“C Programming - A Modern Approach, 2nd Edition”一书中,我读到:
参数转换:
[...]
1)编译器在调用之前遇到了原型。[...]
2)编译器在调用之前没有遇到原型。编译器执行默认参数提升:(1)
float
参数转换为double
. (2) 执行积分提升,导致char
和short
参数被转换为int
。(在 C99 中,执行整数提升。)
几行进一步显示了一个示例,其中在调用之前没有函数原型或定义。评论如下:
当然,更好的解决方案是
square
在调用它之前提供一个原型。在 C99 中,在square
没有首先提供函数的声明或定义的情况下调用是错误的。
这两个草书的句子是不是有点相反?我的意思是,如果 C99 禁止在没有事先声明/定义的情况下调用函数,它如何确定这种函数调用中的提升?