首页 百科知识 语言编译系统之函数的说明

语言编译系统之函数的说明

时间:2022-09-22 百科知识 版权反馈
【摘要】:同普通变量一样,函数调用也应遵循“先说明后使用”的原则。C语言编译系统不检查参数名,有没有参数名对程序不会产生影响。使用函数原型是ANSI C的一个重要特点,其作用是可以利用函数原型在程序的编译阶段对调用函数的合法性进行全面检查。①当被调用函数的定义出现在主调函数之前时可以省去对被调用函数的说明。

5.2.4 函数的说明

同普通变量一样,函数调用也应遵循“先说明后使用”的原则。C语言规定:函数在被调用之前必须对该函数进行定义或说明。函数的定义可以写在程序中的任何位置,如果被调函数定义在主调函数之后,在主调函数中必须要对被调函数进行说明,这样在函数调用的时候才能够找到函数原型。如例5.4的第二行int maxnum(int x,int y,int z);就是对maxnum函数进行说明,即int maxnum(int x,int y,int z);是maxnum函数的函数原型。

函数原型的一般形式是:

(1)函数类型说明符 函数名(参数类型1,参数类型2,…)

(2)函数类型说明符 函数名(参数类型1 参数名1,参数类型2 参数名2,…)

第一种形式是基本形式,为了便于阅读程序,C语言允许在函数原型中加上参数名,也就是第二种形式。C语言编译系统不检查参数名,有没有参数名对程序不会产生影响。

例5.4的第二行函数原型也可写成:int maxnum(int,int,int);

使用函数原型是ANSI C的一个重要特点,其作用是可以利用函数原型在程序的编译阶段对调用函数的合法性进行全面检查。从例5.4中可以看到,main函数的位置在maxnum函数的前面,C语言编译系统在进行编译时是从上到下逐行进行的,如果没有对maxnum函数的说明,当编译到函数调用的语句“max=maxnum(i,j,k);”时,编译系统不能确切知道maxnum是否为函数名,更无法判断实参(i,j和k)的类型和个数是否正确,因此无法进行函数调用合法性检查。如果这样,只有在运行程序时才会发现实参和形参的类型或个数不一致,出现运行错误。在运行时发现错误并重新调试程序是比较麻烦的,工作量也较大,因此,在编译阶段应尽可能多地发现错误,并及时纠正错误。如果在函数调用之前用函数原型对函数进行说明,编译系统将自动记下被调函数的有关信息,在对“max=maxnum(i,j,k);”进行编译时就显得“有章可循”了。编译系统将根据函数的原型对函数调用的合法性进行全面检查,与函数原型不匹配的函数调用会出现编译错误。

注意:

C语言规定,在以下两种情况下,可以省去对被调用函数的说明。

①当被调用函数的定义出现在主调函数之前时可以省去对被调用函数的说明。因为在调用之前,编译系统已经知道了被调用函数的函数类型、参数个数、类型和顺序。

②如果在程序的开头预先对各个函数进行了说明,则在调用函数中可省略对被调用函数的说明。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈