#include
void main()
{
printf("%d
}
int add(int i, int j)
{
return i+j;
}
尽管add要求传入两个参数而实际只传入了一个,这段代码还是能在很多编译器上通过编译而不会产成警告。这是因为很多C编译器既不对参数类型也不对参数个数做匹配性检查。于是您可能仅是因为不小心多传或少传了一个参数而要浪费大量时间调试代码。上面的代码能顺利通过编译,却给出错误的结果。
针对此问题,C语言允许您在程序开始处(实际是任何地方)声明函数原型。这样一来,C就会检查所有参数列表的类型和数目。试试编译下面的程序:
#include
int add (int,int); /* add 的函数原型 */
void main()
{
printf("%d
}
int add(int i, int j)
{
return i+j;
}
函数原型使编译器对printf语句报错。
请在程序开始处为每个函数声明原型。这样可以为您节省大量的调试时间,还顺便解决了不能在定义前使用函数的问题。例如,下面的代码不能通过编译:
#include
void main()
{
printf("%d
}
float add(int i, int j)
{
return i+j;
}
您也许会问:为什么add返回int时可以编译,返回float时就不行了?因为老一些的C编译器默认函数返回一个int值。使用函数原型可以解决这个问题。“旧式”(非ANSI)编译器也支持函数原型,但原型中的参数列表必须为空。旧式编译器不对参数列表进行错误检查。
|
编辑推荐