1.6C语言的一些特点
通过上述的几个例子,可以得出一些结论:
1、C 程序是由函数构成的,一个C 源程序至少包括一个函数,一个C 源程序有且只有
一个名为main()的函数,也可能包含其它函数,因此,函数是C 程序的基本单位。主程序
通过直接书写语句和调用其它函数来实现有关功能,这些其它函数可以是由C 语言本身提
供给我们的(如例3 中的_crol_(…)函数),这样的函数称之为库函数,也可以是用户自
己编写的(如例2、3 中用的mDelay(…)函数),这样的函数称之为用户自定义函数。那
么库函数和用户自定义函数有什么区别呢?简单地说,任何使用Keil C 语言的人,都可以
直接调用C 的库函数而不需要为这个函数写任何代码,只需要包含具有该函数说明的相应
的头文件即可;而自定义函数则是完全个性化的,是用户根据自己需要而编写的。Keil C 提
供了100 多个库函数供我们直接使用。
2、一个函数由两部份组成:
(1)函数的首部、即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形
参)名、参数类型。
例如:void mDelay (unsigned int DelayTime)
一个函数名后面必须跟一对圆括号,即便没有任何参数也是如此。
(2)函数体,即函数首部下面的大括号“{}”内的部份。如果一个函数内有多个大括
号,则最外层的一对“{}”为函数体的范围。
函数体一般包括:
声明部份:在这部份中定义所用到的变量,例 1.2 中unsigned char j。
执行部份:由若干个语句组成。
在某此情况下也可以没有声明部份,甚至即没有声明部份,也没有执行部份,如:
void mDelay()
{}
这是一个空函数,什么也不干,但它是合法的。
在编写程序时,可以利用空函数,比如主程序需要调用一个延时函数,可具体延时多少,
怎么个延时法,暂时还不清楚,我们可以主程序的框架结构弄清,先编译通过,把架子搭起
来再说,至于里面的细节,可以在以后慢慢地填,这时利用空函数,先写这么一个函数,这
样在主程序中就可以调用它了。
3、一个C 语言程序,总是从main 函数开始执行的,而不管物理位置上这个main()放
在什么地方。例1.2 中就是放在了最后,事实上这往往是最常用的一种方式。
图 1-13 观察sec 确定延时时间
4、主程序中的mDelay 如果写成mdelay 就会编译出错,即C 语言区分大小写,这一点
往往让初学者非常困惑,尤其是学过一门其它语言的人,有人喜欢,有人不喜欢,但不管怎
样,你得遵守这一规定。
5、C 语言书写的格式自由,可以在一行写多个语句,也可以把一个语句写在多行。没
有行号(但可以有标号),书写的缩进没有要求。但是建议读者自己按一定的规范来写,可
以给自己带来方便。
6、每个语句和资料定义的最后必须有一个分号,分号是C 语句的必要组成部份。
7、可以用/*…..*/的形式为C 程序的任何一部份作注释,在“/*”开始后,一直到“*/”
为止的中间的任何内容都被认为是注释,所以在书写特别是修改源程序时特别要注意,有时
无意之中删掉一个“*/”,结果,从这里开始一直要遇到下一个“*/”中的全部内容都被认
为是注释了。原本好好的一个程序,编译已过通过了,稍作修改,一下出现了几十甚至上百
个错误,初学C 的人往往对此深感头痛,这时就要检查一下,是不是有这样的情况,如果
有的话,赶紧把这个“*/”补上。
特别地,Keil C 也支持C++风格的注释,就是用“//”引导的后面的语句是注释,例:
P1_0=!P1_0; //取反P1.0
这种风格的注释,只对本行有效,所以不会出现上面的问题,而且书写比较方便,所以
在只需要一行注释的时候,我们往往采用这种格式。但要注意,只有Keil C 支持这种格式,
早期的Franklin C 以及PC 机上用的TC 都不支持这种格式的注释,用上这种注释,编译时
通不过,会报告编译错误。
1、C 程序是由函数构成的,一个C 源程序至少包括一个函数,一个C 源程序有且只有
一个名为main()的函数,也可能包含其它函数,因此,函数是C 程序的基本单位。主程序
通过直接书写语句和调用其它函数来实现有关功能,这些其它函数可以是由C 语言本身提
供给我们的(如例3 中的_crol_(…)函数),这样的函数称之为库函数,也可以是用户自
己编写的(如例2、3 中用的mDelay(…)函数),这样的函数称之为用户自定义函数。那
么库函数和用户自定义函数有什么区别呢?简单地说,任何使用Keil C 语言的人,都可以
直接调用C 的库函数而不需要为这个函数写任何代码,只需要包含具有该函数说明的相应
的头文件即可;而自定义函数则是完全个性化的,是用户根据自己需要而编写的。Keil C 提
供了100 多个库函数供我们直接使用。
2、一个函数由两部份组成:
(1)函数的首部、即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形
参)名、参数类型。
例如:void mDelay (unsigned int DelayTime)
一个函数名后面必须跟一对圆括号,即便没有任何参数也是如此。
(2)函数体,即函数首部下面的大括号“{}”内的部份。如果一个函数内有多个大括
号,则最外层的一对“{}”为函数体的范围。
函数体一般包括:
声明部份:在这部份中定义所用到的变量,例 1.2 中unsigned char j。
执行部份:由若干个语句组成。
在某此情况下也可以没有声明部份,甚至即没有声明部份,也没有执行部份,如:
void mDelay()
{}
这是一个空函数,什么也不干,但它是合法的。
在编写程序时,可以利用空函数,比如主程序需要调用一个延时函数,可具体延时多少,
怎么个延时法,暂时还不清楚,我们可以主程序的框架结构弄清,先编译通过,把架子搭起
来再说,至于里面的细节,可以在以后慢慢地填,这时利用空函数,先写这么一个函数,这
样在主程序中就可以调用它了。
3、一个C 语言程序,总是从main 函数开始执行的,而不管物理位置上这个main()放
在什么地方。例1.2 中就是放在了最后,事实上这往往是最常用的一种方式。
图 1-13 观察sec 确定延时时间
4、主程序中的mDelay 如果写成mdelay 就会编译出错,即C 语言区分大小写,这一点
往往让初学者非常困惑,尤其是学过一门其它语言的人,有人喜欢,有人不喜欢,但不管怎
样,你得遵守这一规定。
5、C 语言书写的格式自由,可以在一行写多个语句,也可以把一个语句写在多行。没
有行号(但可以有标号),书写的缩进没有要求。但是建议读者自己按一定的规范来写,可
以给自己带来方便。
6、每个语句和资料定义的最后必须有一个分号,分号是C 语句的必要组成部份。
7、可以用/*…..*/的形式为C 程序的任何一部份作注释,在“/*”开始后,一直到“*/”
为止的中间的任何内容都被认为是注释,所以在书写特别是修改源程序时特别要注意,有时
无意之中删掉一个“*/”,结果,从这里开始一直要遇到下一个“*/”中的全部内容都被认
为是注释了。原本好好的一个程序,编译已过通过了,稍作修改,一下出现了几十甚至上百
个错误,初学C 的人往往对此深感头痛,这时就要检查一下,是不是有这样的情况,如果
有的话,赶紧把这个“*/”补上。
特别地,Keil C 也支持C++风格的注释,就是用“//”引导的后面的语句是注释,例:
P1_0=!P1_0; //取反P1.0
这种风格的注释,只对本行有效,所以不会出现上面的问题,而且书写比较方便,所以
在只需要一行注释的时候,我们往往采用这种格式。但要注意,只有Keil C 支持这种格式,
早期的Franklin C 以及PC 机上用的TC 都不支持这种格式的注释,用上这种注释,编译时
通不过,会报告编译错误。