【ACCESS精品源码栏目提醒】:网学会员在ACCESS精品源码频道为大家收集整理了“第8章 C51的预处理命令 - 电子电信“提供大家参考,希望对大家有所帮助!
第8章 C51的预处理命令 和用户配置文件8.1C51的预处理命令概述 C51语言中提供了各种预处理命令,其作用类似于汇编程序 中的伪指令。
一般来说,在对C51源程序进行编译前,编译 器需要先对程序中的预处理命令进行处理,然后将预处理 的结果和源代码一并进行编译,最后产生目标代码。
预处 理命令通常只进行一些符号的处理,其并不执行具体的硬 件操作。
为了与C51
源代码中的程序语句相区别,预处理命令前要加 一个“”。
8.1C51的预处理命令概述 预处理命令 用途 define 用于宏定义 error 用于程序调试 include 用于文件包含 if 用于条件编译 else 用于条件编译 elif 用于多种条件编译选择 endif 用于条件编译 ifdef 用于条件编译 ifndef 用于条件编译 undef 用于宏定义 line 用于更改行号 pragma 用于传送控制指令8.2文件包含指令 文件包含指令,即include命令,通常位于C51源程序的开 头,利用include命令可以将其他的文件引入当前的C51源 文件。
其中被包含的文件通常是头文件、宏定义等。
使用 文件包含指令,有利于更好地调试C51源文件。
当需要调试 修改文件时,只要修改某一包含文件即可,而无需对所有 文件进行修改。
8.2.1include命令 在C51语言中,文件包含指令的一般形式如下: include 头文件.h include include 宏定义标识符 其中,“include”表示文件包含指令、双引号或尖括号括起来的文 件名是要引入的源文件。
典型的文件包含指令示例如下: include myfile.h //引用自定义文件myfile include //引用库函数文件studio include //引用寄存器文件 define MATH_FILE Ckeilincmath1.h” //宏定义自定义文件MATH_FILE include MATH_FILE //引用自定义文件MATH_FILE8.2.2C51常用的头文件 在Keil μVision3集成开发环境中,C51标准库提供了许多包含文件, 即C51的头文件。
这些文件存放在目录KeilC51INC文件夹及其子目录 下。
这些头文件包含常数、宏定义、类型定义和函数原型等。
C51常用 的头文件如下: absacc.h—包含允许直接访问8051不同存储区的宏定义。
asscert.h—文件定义asscert宏,用来建立程序的测试条件。
ctype.h—常用的字符转换和分类程序。
intrins.h—文件包含指示编译器产生嵌入原有代码的程序的原型。
math.h—常用数学程序。
reg51.h—51系列单片机特殊寄存器。
reg52.h—52系列单片机特殊寄存器。
setjmp.h—定义jmp_buf类型以及setjmp和longjmp程序的原型。
stdarg.h—可变长度参数
列表程序。
stdlib.h—存储区分配程序。
stdio.h—
常用的输入和输出程序。
string.h—常用的字符串操作程序和缓冲区操作程序。
8.3宏定义指令 宏定义指令是指用一些标识符作为宏名,来代替其他一些 符号或者常量的预处理命令。
使用宏定义指令,可以减少 程序中字符串输入的
工作量,而且可以提高程序的可移植 性。
宏名既可以是字符串或常数,也可以是带参数的宏。
宏定 义指令可分为带参数的宏定义和不带参数的宏定义。
下面 分别介绍用于宏定义的一些预处理命令。
8.3.1define命令 define命令用于定义一个宏名。
宏名是一个标识符,在源 代码中遇到该标识符时,均以宏定义的串的内容代替该标 识符。
ANSI标准宏将定义的标识符称为“宏名”,而用定 义的内容代替宏名的过程称为“宏替换”。
define命令用 于定义宏名时,既可以带参数,也可以不带参数,下面分 别介绍这两种情况。
1.不带参数的宏定义 2.带参数的宏定义8.3.2undef命令 undef命令用于取消前面用define命令定义过的宏名。
一般形式为: undef 宏名 其中,“undef”是取消宏定义指令,“宏名”为前面用define命令 定义过的标识符。
使用undef命令的目的是将宏名局限在指定的代码段中,这样可以限 制宏定义的使用范围。
使用undef命令的程序示例如下: include //头文件 define COUNT 50 //宏定义 void main //主函数 printfCOUNT dn COUNT //输出COUNT 50 undef COUNT //撤销COUNT宏定义 //printfCOUNT dn COUNT //此时再引用COUNT是错误的 8.4条件编译指令 在默认情况下,源
程序中的所有程序代码都要进行编译。
但是有时需要某些语句行在条件满足的情况下,才进行编 译,此时便用到条件编译指令。
目前商业软件公司广泛应 用条件编译来制作某个程序的不同用户的版本,例如专业 版、个人版、试用版等,从而可以限制
软件的某些功能。
条件编译指令是指对源程序的代码有选择地进行编译。
采 用条件编译,可以提高程序的广泛的适用性,缩小目标源 代码的大小,加快程序执行的速度。
C51的条件编译指令有 if、else、ifdef、ifndef、endif这几个命令。
8.4.1if、else和endif命令 if、else和endif命令是一组常用的条件编译指令,用 于进行条件编译,其一般形式如下: if 常