C99标准中的默认参数促销

Que*_*tin 4 c promotions prototype function c99

我对C99标准中的默认参数提升有疑问.在"C编程 - 现代方法,第2版"一书中,我读过:

争论转换:

[...]

1)编译器在调用之前遇到了原型.[...]

2)编译器在调用之前没有遇到原型.编译器执行默认参数提升:(1)float参数转换为double.(2)执行整体促销,导致charshort参数转换为int.(在C99中,执行整数提升.)

进一步示出了一些示例,其中在调用它之前没有函数原型或定义.评论如下:

当然,更好的解决方案是square在调用之前提供原型.在C99中,在square没有首先提供函数声明或定义的情况下调用是一个错误.

这两个草书句子是不是彼此相反?我的意思是,如果C99禁止在没有先前声明/定义的情况下调用函数,它如何确定在那种函数调用中的促销?

Jen*_*edt 7

不,他们不矛盾.

声明不一定是原型:

int f();
Run Code Online (Sandbox Code Playgroud)

声明函数f但不是原型,因为对参数类型一无所知.

int (a)
 in a;
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

是一个定义,但也不是原型.