🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
【53.1 函数的十大关联部件。】 函数是什么?我很难用一句话给它下定义,哪怕我真能用一句话定义了,初学者也很难从一句话的定义中“格”出函数之理。之所以函数有如此玄机,确实因为它包罗万象,涉及的内容非常多,就像要我去定义什么是中国,我也没法用一句话去定义,只有长大了慢慢了解它的地理文化历史,你才会对咱中国有深刻的认识。函数也是如此,虽然我不能用一句话定义函数,但是函数跟十大部件有关,只要今后不断学习和运用,对十大部件各个击破直到全部“通关”,总有一天你会感悟到函数的精髓。现在先把十大部件列出来,让大家有一个感性的认识,它们是:函数体,函数接口,return语句,栈,全局变量,普通局部变量,静态局部变量,单个变量的指针,数组的指针,结构体的指针。本节讲的“使用函数的三要素和执行顺序”就是属于“函数体”这个部件的内容。 【53.2 使用函数的三要素。】 有的人习惯把函数称为程序,比如主程序,子程序,这时的主程序对应主函数,子程序对应子函数,是一回事,只是每个人的表达习惯不一样而已。使用函数的三要素是声明,定义,调用。每次新构造一个函数时,尽量遵守这个三个要素来做就可以减少一些差错。什么叫函数的声明,定义,调用?为了让大家有一个感性的认识,请先看下面这个例子: /\*---C语言学习区域的开始。-----------------------------------------------\*/ void HanShu(void); //子函数声明的第一区域 unsigned char a; //全局变量定义的第二区域 unsigned char b; unsigned char c; void HanShu(void) //子函数定义的第三区域 { a++; //子函数的代码语句 b=b+5; c=c+6; } void main() //主函数 { a=0; b=0; c=0; HanShu() ; //子函数被调用的第四区域 c=a+b; while(1) { } } /\*---C语言学习区域的结束。-----------------------------------------------\*/ 分析:上述例子中,从书写代码区域的角度来寻找函数的大概规律,从上往下: 第一区域:写子函数HanShu声明。 第二区域:全局变量的定义。 第三区域:子函数HanShu的定义。 第四区域:在main函数里对子函数HanShu的调用。 【53.3 子函数被其它函数调用时候的执行顺序。】 子函数被其它函数调用时,子函数的名字就相当于一个跳转地址,而子函数的定义部分就是要跳转的实际地址,单片机在主函数里遇到子函数名字,就直接跳转到子函数定义那里执行子函数内部的代码,执行完子函数后再返回到主函数,此时返回到主函数哪里呢?答:因为子函数已经被执行了一次,所以返回到主函数中的子函数名字后面,然后继续往下执行main函数其它剩余的代码。请看下面这个代码的执行顺序,一目了然: /\*---C语言学习区域的开始。-----------------------------------------------\*/ void HanShu(void); //子函数的声明 void HanShu(void) //子函数的定义 { 语句1; 语句2; } void main() //主函数 { 语句3; HanShu() ; //子函数的被调用 语句4; while(1) { } } /\*---C语言学习区域的结束。-----------------------------------------------\*/ 执行顺序分析:单片机从主函数main那里进来往下执行,先执行“语句3”,接着遇到HanShu名字的跳转地址,然后马上跳转到HanShu的定义部分,执行“语句1”,“语句2”,执行完子函数HanShu的定义部分,就马上返回到主函数,继续执行HanShu名字后面的“语句4”。整个执行语句的先后顺序如下: 语句3; 语句1; 语句2; 语句4; 【53.4 例程练习和分析。】 现在编写一个练习程序来体验一下函数的使用。 程序代码如下: /\*---C语言学习区域的开始。-----------------------------------------------\*/ void HanShu(void); //子函数声明的第一区域 unsigned char a; //全局变量定义的第二区域 void HanShu(void) //子函数定义的第三区域 { a++; //子函数的代码语句 } void main() //主函数 { a=0; a++; HanShu() ; //子函数被调用的第四区域 a++; View(a); //把第1个数a发送到电脑端的串口助手软件上观察。 while(1) { } } /\*---C语言学习区域的结束。-----------------------------------------------\*/ 在电脑串口助手软件上观察到的程序执行现象如下: 开始... 第1个数 十进制:3 十六进制:3 二进制:11 分析: 变量a为3。单片机从main主函数进来,主函数里有2条“a++”,再加上子函数里也有1条“a++”,因此累加了3次,从0变成了3. 【53.5 如何在单片机上练习本章节C语言程序?】 直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C语言学习区域”的代码就可以了,其它部分的代码不要动。编译后,把程序下载进带串口的51学习板,通过电脑端的串口助手软件就可以观察到不同的变量数值,详细方法请看第十一节内容。