函数和编译预处理.ppt
《函数和编译预处理.ppt》由会员分享,可在线阅读,更多相关《函数和编译预处理.ppt(47页珍藏版)》请在三一办公上搜索。
1、第5章,函数和编译预处理,本章主要内容,5.1 函数的基本概念5.2 函 数 定 义5.3 函 数 调 用5.4 函数的参数传递和函数的返回值5.5 函 数 声 明5.6 带默认形参值的函数5.7 内 联 函 数5.8 函数的嵌套和递归调用5.9 作用域和存储类型5.10 函数的重载5.11 编译预处理5.12 程序的多文件组织,5.1 函数的基本概念,在C+语言中,从不同的角度对函数分类如下。1.库函数和用户定义函数 从函数定义的角度看,函数可分为库函数和用户自定义函数两种。(1)库函数:C+编译系统、操作系统或其他系统为方便用户程序设计而预定义的函数,只需在程序前包含有该函数原型的头文件即
2、可在程序中直接调用。(2)用户自定义函数:由用户根据自己的需要,将完成某一相对独立功能的程序定义为一个函数,称为用户自定义函数。,5.1 函数的基本概念,2.有返回值函数和无返回值函数 C+语言的函数兼有其他语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。(1)有返回值函数:此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。(2)无返回值函数:此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。,5.1 函数的基本概念,3.无参函数和有参函数 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。(1)无
3、参函数:函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。(2)有参函数:也称为带参函数。在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。,5.2 函 数 定 义,5.2.1 无参函数的定义5.2.2 有参函数的定义5.2.3 函数定义的注意点,5.2.1 无参函数的定义,定义无参函数的一般格式为:(void)/函数头 其中,type为函数返回值的类型,可以是标准数据类型或导出的数据类型。函数名必须符合标识符构成的规则。通常,函数名应能反映函数的功能。为一个复合语句,用于实现相应函数的功能。当函数仅完成某种固定操作时,可将函数定义为无参函数。在很多情况
4、下都不要求无参函数有返回值,此时函数类型符可以写为void。,5.2.2 有参函数的定义,定义有参函数的一般格式为:()有参函数比无参函数多了形式参数列表。由一个或多个形参说明构成,每个形参说明的格式为:其中的是形式参数的名,用标识符表示,其格式和定义与变量相同。作为函数体的复合语句中可以包含return语句,当函数体执行到return语句时,函数立即返回到调用者,return语句的格式为:return 或 return;,5.2.3 函数定义的注意点,在定义一个函数时要注意以下几个方面:(1)确定该函数所要实现的功能,使用自然语言(汉语等)或数学的方法描述出实现该功能的算法和步骤。(2)一个
5、函数可有多个形参。(3)确定函数功能的算法是否有结果需要返回给调用者。(4)函数名最好能够让调用者看到函数名就能够明白函数的功能。(5)空函数:函数体为空的函数,花括号不可省。(6)函数定义时,函数体内不能包含其他函数的定义。,5.3 函 数 调 用,5.3.1 函数调用的一般形式5.3.2 函数调用的方式5.3.3 函数调用的注意点,5.3.1 函数调用的一般形式,调用函数的一般格式为:()其中,是已定义的函数的名字;由零个、一个或多个实际参数(用逗号分割)构成。每个实际参数(简称实参)都是一个表达式,它们的个数以及对应位置的类型应该和定义该函数时指定的形参类型相同,如果类型不同,则系统将利
6、用类型转换,将实参的值转换成形参类型,然后赋给形参。形参和实参的个数应该相等。,5.3.2 函数调用的方式,在C+中,有3种函数调用方式。1.函数语句 函数调用的一般形式加上分号即构成函数语句。2.函数表达式 函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。3.函数实参 函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送。例5-1 求任意两个实数和的函数,5.3.3 函数调用的注意点,(1)函数调用时,系统为形参分配相应的存储单元,用于接收实参传递的数据。(2)若函数的形参为普通变量(不是指针变量和引用变量),则调
7、用该函数时,实参给形参赋值,这种参数传递方式称为值传递或传值。(3)传值调用时,实参的求值顺序因编译系统而异,有的从右向左,有的从左向右。(4)传值调用的优点是,函数调用对其外界的变量无影响,最多只能用return返回一个值,函数的独立性强。例5-2 函数值传递调用,5.4 函数的参数传递和函数的返回值,5.4.1 函数的形式参数和实际参数5.4.2 函数的返回值,5.4.1 函数的形式参数和实际参数,形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传
8、送给被调函数的形参从而实现主调函数向被调函数的数据传送。,5.4.1 函数的形式参数和实际参数,函数的形参和实参具有以下几个特点。(1)当被调函数有参数时,主调函数和被调函数之间通过形参实现数据传递。(2)定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,只有在发生函数调用时,形参才被分配内存单元。在调用结束后,形参所占的内存单元被释放。(3)函数调用时实参的类型应与形参的类型一一对应。(4)实参应有确定值,可为常量、变量或表达式。(5)在定义函数时,必须在函数首部指定形参的类型。,5.4.2 函数的返回值,函数的返回值是通过函数中的return语句获得的,由被调函数计算处
9、理后向主调函数返回的计算结果,最多只能一个。无返回值的函数其返回值类型应说明为void类型,否则将返回一个不确定的值。,5.4.2 函数的返回值,关于函数的返回值有以下一些说明。(1)在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。(2)return 语句后面的括号可以要,也可以不要,如“return z;”与“return(z);”等价。(3)在执行被调函数时,遇到return语句就结束函数的执行,返回到主调函数。(4)若函数有多个返回分支,则应保证每个分支均有确定的返回值,否则可能出现逻辑错误。,5.5 函 数 声 明,函数声明由函
10、数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但不必对形参命名。函数声明一般形式为:();函数声明与函数定义在返回类型、函数名和参数类型方面必须一致;函数声明是语句,必须以分号“;”结束,而函数定义时的头部之后不能有分号。例5-3 函数声明,5.5 函 数 声 明,以下是有关函数声明的几点说明。(1)一个函数的函数原型声明应出现在该函数调用之前。(2)如果函数定义在函数调用语句之前,则不必进行函数原型声明。(3)在函数声明中,可以只列出形参的类型。(4)函数声明的作用是给编译器提供关于函数的信息,使得编译器能够对函数调用的合法性进行检查,并产生函数调用的正确代码。,5.6 带默认
11、形参值的函数,在C+中,允许在定义或声明函数时,为函数的某些参数指定默认值。当调用这些函数时,若没有提供相应的实参,则相应的形参采用指定的默认值。在指定函数参数的默认值时,应该注意下面几点:(1)有默认形参值的形参应该处于形参表的右部。(2)形参的默认值可以是常量表达式,即表达式中用到的量必须是常量。例5-4 带默认形参值的函数 例5-5 带有多个默认形参值的函数 例5-6 函数声明中指定形参默认值,5.7 内 联 函 数,函数定义时,在函数的返回类型之前加上一个关键字inline,指明将这函数定义为内联函数,其作用是建议编译器把该函数的函数体代码展开到调用处。内联函数的实质是用空间换取时间,
12、即占用更多的存储空间而减少执行时间。内联函数机制:不是在调用时发生转移,而是在编译时将函数体嵌入到每个内联函数调用处。,5.7 内 联 函 数,在使用内联函数时,需要注意以下几点:。(1)编译器对内联函数的限制。(2)功能简单、代码短小(不含循环、switch和复杂嵌套的if语句)、运行时间极短、调用频繁的函数应定义成内联的。(3)程序中多次调用同一内联函数时,增加了程序本身占用的存储空间;而内联函数仅调用一次时,并不增加程序占用的存储空间。,5.8 函数的嵌套和递归调用,5.8.1 函数的嵌套调用5.8.2 函数的递归调用,5.8.1 函数的嵌套调用,函数之间都是平等的、平行的,即不允许函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 编译 预处理
链接地址:https://www.31ppt.com/p-6221442.html