C51的预处理命令.ppt
《C51的预处理命令.ppt》由会员分享,可在线阅读,更多相关《C51的预处理命令.ppt(22页珍藏版)》请在三一文库上搜索。
1、第8章 C51的预处理命令和用户配置文件,用户编写的C51程序代码只能控制程序的执行流程,若要对编译程序进行操作,就要用到预处理命令。在编译环境对源程序进行编译前,先对程序中的预处理命令进行处理,然后将处理结果和源程序一起进行编译。 预处理命令通常只进行一些符号的处理,其并不执行具体的单片机硬件操作。C51语言中的预处理命令包括文件包含指令、宏定义指令和条件编译指令等,还有其他一些指令在程序调试时使用。本章将详细介绍各种常用的预处理命令的用法,同时还介绍了C51的用户配置文件相关的内容。,8.1 C51的预处理命令概述,C51语言中提供了各种预处理命令,其作用类似于汇编程序中的伪指令。一般来说
2、,在对C51源程序进行编译前,编译器需要先对程序中的预处理命令进行处理,然后将预处理的结果和源代码一并进行编译,最后产生目标代码。预处理命令通常只进行一些符号的处理,其并不执行具体的硬件操作。 为了与C51源代码中的程序语句相区别,预处理命令前要加一个“#”。C51语言中的预处理命令,如表所示。,C51的预处理命令,8.2 文件包含指令,文件包含指令,即#include命令,通常位于C51源程序的开头,利用#include命令可以将其他的文件引入当前的C51源文件。其中被包含的文件通常是头文件、宏定义等。使用文件包含指令,有利于更好地调试C51源文件。当需要调试修改文件时,只要修改某一包含文件
3、即可,而无需对所有文件进行修改。,8.2.1 #include命令,在C51语言中,文件包含指令的一般形式如下: #include “头文件.h“ #include #include 宏定义标识符 其中,“#include”表示文件包含指令、双引号或尖括号括起来的文件名是要引入的源文件。典型的文件包含指令示例如下: #include “myfile.h“ /引用自定义文件myfile #include /引用库函数文件studio #include /引用寄存器文件 define MATH_FILE “Ckeilincmath1.h“ /宏定义自定义文件MATH_FILE #include M
4、ATH_FILE /引用自定义文件MATH_FILE,8.2.2 C51常用的头文件,在Keil Vision3集成开发环境中,C51标准库提供了许多包含文件,即C51的头文件。这些文件存放在目录KeilC51INC文件夹及其子目录下。这些头文件包含常数、宏定义、类型定义和函数原型等。C51常用的头文件如下: absacc.h包含允许直接访问8051不同存储区的宏定义。 asscert.h文件定义asscert宏,用来建立程序的测试条件。 ctype.h常用的字符转换和分类程序。 intrins.h文件包含指示编译器产生嵌入原有代码的程序的原型。 math.h常用数学程序。 reg51.h51
5、系列单片机特殊寄存器。 reg52.h52系列单片机特殊寄存器。 setjmp.h定义jmp_buf类型以及setjmp和longjmp程序的原型。 stdarg.h可变长度参数列表程序。 stdlib.h存储区分配程序。 stdio.h常用的输入和输出程序。 string.h常用的字符串操作程序和缓冲区操作程序。,8.3 宏定义指令,宏定义指令是指用一些标识符作为宏名,来代替其他一些符号或者常量的预处理命令。使用宏定义指令,可以减少程序中字符串输入的工作量,而且可以提高程序的可移植性。 宏名既可以是字符串或常数,也可以是带参数的宏。宏定义指令可分为带参数的宏定义和不带参数的宏定义。下面分别介
6、绍用于宏定义的一些预处理命令。,8.3.1 #define命令,#define命令用于定义一个宏名。宏名是一个标识符,在源代码中遇到该标识符时,均以宏定义的串的内容代替该标识符。ANSI标准宏将定义的标识符称为“宏名”,而用定义的内容代替宏名的过程称为“宏替换”。#define命令用于定义宏名时,既可以带参数,也可以不带参数,下面分别介绍这两种情况。 1不带参数的宏定义 2带参数的宏定义,8.3.2 #undef命令,#undef命令用于取消前面用#define命令定义过的宏名。一般形式为: #undef 宏名 其中,“#undef”是取消宏定义指令,“宏名”为前面用#define命令定义过的
7、标识符。 使用#undef命令的目的是将宏名局限在指定的代码段中,这样可以限制宏定义的使用范围。使用#undef命令的程序示例如下: #include /头文件 #define COUNT 50 /宏定义 void main() /主函数 printf(“COUNT =%dn“, COUNT); /输出COUNT =50 #undef COUNT /撤销COUNT宏定义 /printf(“COUNT =%dn“, COUNT); /此时再引用COUNT是错误的 ,8.4 条件编译指令,在默认情况下,源程序中的所有程序代码都要进行编译。但是有时需要某些语句行在条件满足的情况下,才进行编译,此时便
8、用到条件编译指令。目前商业软件公司广泛应用条件编译来制作某个程序的不同用户的版本,例如专业版、个人版、试用版等,从而可以限制软件的某些功能。 条件编译指令是指对源程序的代码有选择地进行编译。采用条件编译,可以提高程序的广泛的适用性,缩小目标源代码的大小,加快程序执行的速度。C51的条件编译指令有#if、#else、#ifdef、#ifndef、#endif这几个命令。下面分别介绍这些命令的用法。,8.4.1 #if、#else和#endif命令,#if、#else和#endif命令是一组常用的条件编译指令,用于进行条件编译,其一般形式如下: #if 常量表达式 语句段; #else 语句段;
9、#endif 其中,“#if”、“#else”、“#endif”为条件编译指令,“常量表达式”为进行条件编译的判断条件,语句段为进行条件编译的程序代码段。,8.4.2 #elif命令,#elif命令用于进行在多种编译条件下进行选择编译的情况。其含义与“else if”相同,形成一个阶梯状编译语句。使用#elif命令的一般形式如下: #if 表达式0 语句段; #elif 表达式1 语句段; #elif 表达式2 语句段; #elif 表达式n 语句段; #endif,8.4.3 #ifdef、#ifndef命令,#ifdef与#ifndef命令用于判断宏名是否被定义过,并根据判断的情况进行条件
10、编译。#ifdef命令的一般形式是: #ifdef 宏名 语句段; #else 语句段; #endif,8.5 其他编译指令,#line命令用于修改_LINE_与_FILE_的内容。其中“_LINE_”和“_FILE_”是在编译程序中预先定义的标识符,分别表示行号和源文件。#line命令主要用于调试及其他一些特殊的应用。使用#line命令的一般形式如下: #line 数字“文件名“ 其中,“数字”为任意正整数,表示源程序中当前语句的行号;“文件名”为可选的任意有效文件标识符,表示源文件的名字。使用#line命令的程序示例如下: #include /头文件 #line 300 /初始化行计数器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 预处理 命令
链接地址:https://www.31doc.com/p-2102000.html