购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4.1 函数的定义

从用户的角度来看,有两种函数:标准库函数和用户自定义函数。标准库函数是Keil C51编译器提供的,不需要用户进行定义,可以直接调用。用户自定义函数是用户根据自己需要编写的能实现特定功能的函数,它必须先进行定义之后才能调用。函数定义的一般形式为:

其中,

·“函数类型”说明了自定义函数返回值的类型。

·“函数名”是用标识符表示的自定义函数名字。

·“形式参数表”中列出的是在主调用函数与被调用函数之间传递数据的形式参数,形式参数的类型必须加以说明。ANSI C标准允许在形式参数表中对形式参数的类型进行说明。如果定义的是无参函数,可以没有形式参数表,但圆括号不能省略。

·“局部变量定义”是对在函数内部使用的局部变量进行定义。

·“函数体语句”是为完成该函数的特定功能而设置的各种语句。

如果定义函数时只给出一对花括号{}而不给出其局部变量和函数体语句,则该函数为“空函数”,这种空函数也是合法的。在进行C语言模块化程序设计时,各模块的功能可通过函数来实现。开始时只设计最基本的模块,其他作为扩充功能在以后需要时再加上。编写程序时可在将来准备扩充的地方写上一个空函数,这样可使程序的结构清晰,可读性好,而且易于扩充。

例2-23 定义一个计算整数的正整数次幂的函数。

这里定义了一个返回值为整型值的函数power(),它有两个形式参数:x,n。形式参数的作用是接受从主调用函数传递过来的实际参数的值。上例中形式参数x和n被说明为int类型。花括号以内的部分是自定义函数的函数体。上例中在函数体内定义了两个局部变量i和p,它们均为整型数据。

需要注意的是,形式参数的说明与函数体内的局部变量定义是完全不同的两个部分,前者应写在花括号的外面,而后者是函数体的一个组成部分,必须写在花括号的里面。为了不发生混淆,ANSI C标准允许在形式参数表中对形式参数的类型进行了说明,如上例可写成:int power(int x,int n)。

在函数体中可以根据用户自己的需要,设置各种不同的语句。这些语句应能完成所需要的功能。上例在函数体中用一个for循环结构完成一个整数的正整数次幂的计算,计算结果赋值给变量p。函数体中最后一条语句return(p)的作用是将p的值返回到主调用函数中去。return语句后面圆括号中的值称为函数的返回值,圆括号可以省略,即return p和return(p)是等价的。

由于p是函数的返回值,因此在函数体中进行变量定义时,应将变量p的类型定义得与函数本身的类型相一致。如果两者类型不一致,则函数调用时的返回值可能发生错误。如果函数体中没有return语句,则该函数由函数体最后面的右闭花括号“}”返回。在这种情况下,函数的返回值是不确定的。

对于不需要有返回值的函数,可以将该函数定义为void类型(空类型)。对于上例,如果定义为:void power(int x,int n),则可将函数体中的return语句去掉,这样,编译器会保证在函数调用结束时不使函数返回任何值。为了使程序减少出错,保证函数的正确调用,凡是不要求有返回值的函数,都应将其定义成void类型。

例2-24 不同函数的定义方法。 lSNORyhHsWWatNegrNu2wWyWZgN4ZdLrpmeCPSD66dZ5qlootyY9q5wd9qPwGjJO

点击中间区域
呼出菜单
上一章
目录
下一章
×