函数:函数原型
现在考虑使用的好形式函数原型你的程序的所有功能。原型声明函数名,参数和返回类型的函数的实际声明之前。要理解为什么函数原型是有用的,输入以下代码并运行:
# include < stdio。h > void main () {printf (" % d \ n”,添加(3));}int添加(int, int j){返回我+ j;}
这段代码编译在许多编译器没有给你一个警告,即使添加预计两个参数但收到只有一个。它工作,因为许多C编译器不检查参数匹配的类型或数量。你会浪费大量的时间调试代码的简单地通过一个过多或过少的参数错误。上面的代码编译正确,但它产生错误的答案。
广告
为了解决这个问题,C可以让你把函数原型的开头(实际上,任何地方)一个程序。如果你这样做,C检查所有参数列表的类型和数量。试着编译如下:
# include < stdio。h > int添加(int, int);/ *函数原型添加* / void main () {printf (" % d \ n”,添加(3));}int添加(int, int j){返回我+ j;}
原型让编译器标记的一个错误printf声明。
一个原型为每个函数在程序的开始。他们可以节省你大量的调试时间,他们也解决问题与函数在编译时你使用之前宣布。例如,下面的代码将不会编译:
# include < stdio。h > void main () {printf (" % d \ n”,添加(3));}浮动添加(int, int j){返回我+ j;}
你可能会问,为什么它会编译时添加返回一个int但当它返回一个浮点数?因为旧的C编译器默认为int返回值。使用一个原型将解决这个问题。“老式”(non-ANSI)编译器允许原型,但原型的参数列表必须是空的。老式编译器做的参数列表上没有错误检查。