函数定义的一般形式如下:
函数值类型 函数名 (形式参数列表){ 函数体 }
1) 函数值类型,就是函数返回值的类型。在我们后边的程序中,会有很多函数中有 return x 这个东西,这个返回值也就是函数本身的类型。还有一种情况,就是这个函数只执行操作,不需要返回任何值,那么这个时候它的类型就是空类型 void,这个 void 按道理来说是可以省略的,但是一旦省略,Keil 软件会报一个警告,所以我们通常也不省。
2) 函数名,可以由任意的字母、数字和下划线组成,但数字不能作为开头。函数名不能与其他函数或者变量重名,也不能是关键字。什么是关键字呢,后边我们慢慢接触,比如 char 这类,都是关键字,是我们程序中具备特殊功能的标志符,这种东西不可以命名函数。
3) 形式参数列表,也叫做形参列表,这个是函数调用的时候,相互传递数据用的。有的函数,我们不需要传递参数给它,那么可以用 void 来替代,void 同样可以省略,但是那个括号是不能省略的。
4) 函数体,包含了声明语句部分和执行语句部分。声明语句部分主要用于声明函数内部所使用的变量,执行语句部分主要是一些函数需要执行的语句。特别注意,所有的声明语句部分必须放在执行语句之前,否则编译的时候会报错。
5) 一个工程文件必须有且仅有一个 main 函数,程序执行的时候,都是从 main 函数开始的。
6) 关于形参和实参的概念,我们后边再总结,如果遇到程序里有,大家再跟着抄一段时间。先用,后讲解,这样更有利于理解。
我们来回顾一下上节课的闪烁 LED 程序中的主函数,大家根据注释再认真分析一遍,是不是对函数的认识就清楚多了。
void main(){ //void 即函数类型 //以下为声明语句部分 unsigned int i = 0; //定义一个无符号整型变量 i,并赋初值0 //以下为执行语句部分 ENLED = 0; //U3、U4 两片 74HC138 总使能 ADDR3 = 1; //使能 U3 使之正常输出 ADDR2 = 1; //经 U3 的 Y6 输出开启三极管 Q16 ADDR1 = 1; ADDR0 = 0; while (1){ LED = 0; //点亮小灯 for (i=0; i<30000; i++); //延时一段时间 LED = 1; //熄灭小灯 for (i=0; i<30000; i++); //延时一段时间 } }代码中的“//”是注释符,意思是说在这之后的内容都是注释。注释是给程序员自己或其他人看的,用于对程序代码做一些补充说明,对程序的编译和执行没有任何影响。