解决方法
C中的函数调用不需要原型可见,但强烈建议在原型范围内使用正确的原型.
这样做的原因是,如果在执行默认函数参数提升后函数定义与函数参数的类型不匹配,则很可能会得到未定义的行为.
正确的原型可见意味着编译器可以检查函数调用的参数,并警告程序员是否存在不匹配.
默认参数促销可能会导致意外不匹配.
例如.
int main(int argc,char **argv) { short s = 5; float f = 2.3f; x(s,f); // x implicitly declared; default argument promotions performed return 0; } int x(short t,float g) // Error: called with an int and a double { return (int)(t + g); }
在函数调用中,因为x没有可见原型(尚未),s将被提升为int,f将被提升为double.这些是默认参数促销.然后,当使用带有short和float的原型定义函数时,这会导致不匹配,即使这些是传入的参数的原始类型.