Que*_*tin 4 c promotions prototype function c99
我对C99标准中的默认参数提升有疑问.在"C编程 - 现代方法,第2版"一书中,我读过:
争论转换:
[...]
1)编译器在调用之前遇到了原型.[...]
2)编译器在调用之前没有遇到原型.编译器执行默认参数提升:(1)
float参数转换为double.(2)执行整体促销,导致char和short参数转换为int.(在C99中,执行整数提升.)
进一步示出了一些示例,其中在调用它之前没有函数原型或定义.评论如下:
当然,更好的解决方案是
square在调用之前提供原型.在C99中,在square没有首先提供函数声明或定义的情况下调用是一个错误.
这两个草书句子是不是彼此相反?我的意思是,如果C99禁止在没有先前声明/定义的情况下调用函数,它如何确定在那种函数调用中的促销?
不,他们不矛盾.
声明不一定是原型:
int f();
Run Code Online (Sandbox Code Playgroud)
声明函数f但不是原型,因为对参数类型一无所知.
int (a)
in a;
{
...
}
Run Code Online (Sandbox Code Playgroud)
是一个定义,但也不是原型.