目录
模块化编程(Modular Programming)
函数的分类
函数的定义
使用函数编程的好处
函数调用的基本方式
函数调用时的数据传递
函数调用的过程
main函数的特殊性
大话三国
分而治之
如果将main()函数比作诸葛亮,……?
一个函数中适合放多少行代码?
*1986年IBM的研究结果:多数有错误的函数大于500行
*1991年对148,000行代码的研究表明:小于143行的函数更易于维护
分而治之(Divide and Conquer,Wirth,1971)
*把一个复杂的问题分解为若干个简单的问题,提炼出公共任务,把不同的功能分解到不同的模块中
*复杂问题求解的基本方法,模块化编程的基本思想
模块化编程(Modular Programming)
函数(Function)
构成C语言程序的基本模块,模块化编程的最小单位
C程序的逻辑结构
一个C程序由一个或多个源程序文件组成
一个源程序文件由一个或多个函数组成
可把每个函数看作一个模块(Module)
函数的分类
标准库函数
ANSI / ISO C定义的标准库函数
*使用时,必须在程序开头把定义该函数的头文件包含进来
第三方库函数
*不在标准范围内,能扩充C语言的功能,由其他厂商自行开发的C语言函数库
自定义函数
用户自己定义的函数
*包装后,也可成为函数库,供被人使用
函数的定义
使用函数编程的好处
信息隐藏(Information Hiding,Parnas,1972)
*对于函数的使用者,无需知道函数内部如何运作
*只了解其与外界的接口(Interface)即可
*把函数内的具体实现细节对外界隐藏起来,只要对外提供的接口不变,就不影响函数的使用
*便于实现函数的复用和模块化编程
函数调用的基本方式
主调函数通过函数名调用被调函数
函数无返回值时,单独作为一个函数调用语句
调用者通过函数名调用函数
有返回值时,可放到一个赋值表达式语句中
还可放到一个函数调用语句中,作为另一个函数的参数
函数调用时的数据传递
函数定义时的参数,形式参数(Parameter),简称形参
函数调用时的参数,实际参数(Argument),简称实参
函数调用的过程
每次执行函数调用时
-现场保护并为函数内的局部变量(包括形参)分配内存
-把实参值复制一份给形参,单向传值(实参→形参)
-实参与形参的数目、类型和顺序要一致
程序控制权交给被调函数,执行函数内的语句
当执行到return语句或 } 时,从函数退出
从函数退出时
-根据函数调用栈中保存的返回地址,返回到本次函数调用的地方
-把函数值返回给主调函数,同时把控制权还给调用者
-收回分配给函数内所有变量(包括形参)的内存