21天学51单片机开发:第11章 C51的预处理_第1页
21天学51单片机开发:第11章 C51的预处理_第2页
21天学51单片机开发:第11章 C51的预处理_第3页
21天学51单片机开发:第11章 C51的预处理_第4页
21天学51单片机开发:第11章 C51的预处理_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

21天学51单片机开发第十一讲:C51的预处理课程安排预处理命令概述宏定义指令文件包含指令条件编译指令其他预处理指令预处理命令概述预处理命令,顾名思义,便是在程序编译和执行前首先执行的命令。预处理命令在功能上有点类似于单片机汇编语言的伪指令。C51语言中的预处理命令包括文件包含指令、宏定义指令、条件编译指令以及一些程序调试指令。预处理命令前要加一个“#”。预处理命令单片机C51语言中的预处理命令包括以下几个:#define#error#include#if#else#elif#endif#ifdef#ifndef#undef#line#pragma分类

这里,按照功能来讲:#define和#undef属于宏定义类指令#if、#else、#ifdef、#ifndef和#endif属于条件编译类指令#include属于文件包含类指令#line、#error和#pragma用于其他用途的预处理指令。宏定义指令

宏定义指令是采用用户自定义的标识符来代替一些符号、常量以及表达式等。C51语言的宏定义指令包括#define和#undef,具体可以分为如下几个:#define指令带参数的#define指令#undef指令#define指令

#define指令的使用格式如下:#define标识符替换对象

宏定义指令一般放在程序的开头,典型的宏定义指令示例如下:#defineTURE 1#defineFALSE 0#definestr hello!#definePI 3.14也就是说,如果在源代码中,遇到TURE就用1代替,FALSE就用0代替,str用hello!代替,PI就用3.14代替。宏定义指令的好处在程序中使用宏定义指令的好处是:可以采用较短的字符串来代替较长的字符串,从而减少程序中字符串输入的工作量。可以提高程序的可移植性。便于整体修改一个程序中经常使用的常量或者字符串,方便了程序的调试和修改。宏定义可以表示数组的大小,这样便于程序的修改。示例如下:#defineSIZE10intch[SIZE];宏定义指令的注意事项

在程序中使用宏定义指令时,应注意以下几点:宏定义指令应该放到程序文件的开始处。宏定义指令后面不需要加分号。如果程序中宏定义指令较多,可将其放到独立的文件中,保存为*.h文件,然后用#include指令来访问。宏名的定义需要满足C51标识符的命名规则。可以分为多行来书写。宏定义的宏名可以嵌套使用。带参数的#define指令宏定义指令#define还可以带参数表,其一般形式如下:#define标识符(参数表)替换对象带参数的宏定义和函数的作用很相似。#undef指令#undef指令的一般形式如下:#undef宏名01 #include<stdio.h> //头文件02 #definePI 3.14159 //宏定义PI=3.1415903 #defineL(R) 2*PI*R //带参数的宏定义,用于计算周长04 #defineS(R) PI*R*R //带参数的宏定义,用于计算面积05 voidmain() //主函数06 {07 intr;08 r=2;09 printf("r=%d,L=%f\n",r,L(r)); //输出周长10 printf("r=%d,S=%f\n",r,S(r)); //输出面积11 #undefPI //取消宏定义12 #undefL //取消宏定义13 #undefS //取消宏定义14 printf("r=%d,L=%f\n",r,L(r)); //输出周长15 printf("r=%d,S=%f\n",r,S(r)); //输出面积16 }文件包含指令#include指令的一般形式如下:#include"头文件.h"#include<头文件.h>#include宏定义标识符一个#include命令只能包含一个文件。

#include命令末尾不需要分号“;”结束。两种使用区别

使用#include时,文件的包含可以采用两种方式:文件的包含采用双引号文件的包含采用尖括号常用的头文件absacc.hasscert.hctype.hintrins.hmath.hreg51.hsetjmp.hstdarg.hstdlib.hstdio.hstring.h条件编译指令条件编译指令提供了一种根据一定的条件来对程序中的语句段进行编译的功能。C51的条件编译指令有:#if#else#ifdef#ifndef#endif双分支条件编译指令双分支条件编译指令的一般形式如下:#if表达式 语句段;#else

语句段;#endif

注意:跟在#if后面的表达式必须仅含常量及已定义过的标识符

多分支条件编译指令多分支条件编译指令的一般形式如下:#if表达式0

语句段;#elif表达式1

语句段;#elif表达式2

语句段;#elif表达式3

语句段;…#elif表达式n

语句段;#endif

宏名判断指令宏名判断指令用于判断宏名是否被定义,包括#ifdef指令与#ifndef指令。#ifdef宏名 语句段;#endif

#ifndef宏名 语句段;#endif

#line指令#line指令用于改变当前行的行号,也就是__LINE__的内容。其一般形式如下:#line数字01 #include<stdio.h> //头文件02 voidmain() 03 { 04 #line100 //初始化行计数器05 printf("LineNumber=%d\n",__LINE__); //行号10006 }#error指令#error指令用来强制停止编译并输出错误信息。#error指令使用的一般形式如下:#error“message”

01 #include<stdio.h> //头文件02 voidmain() //主函数03 {04 #ifdefSCORE05 if(SCORE>90) //如果宏SCORE存在,则执行该语句 06 printf("VeryGood!\n"); 07 elseif(SCORE>80) 08 printf("Good!");09 elseif(SCORE>60)10 printf("Pass!");11 else12 printf("Lost!");13 #else14 #error"NoSCORE!\n" //如果宏SCORE不存在,则执行该语句15 #endif16 }#pragma指令该指令提供了用户程序和编译器之间的交互。典型的#pragma指令示例如下:#pragmasfr //在C51语言中使用SFR#pragmaaccess //使用绝对地址#pragmaasm //在C51语言中插入汇编语句01 #include<REG51.h> //头文件02 voidmain() //主函数03 {04 while(1)05 {06 P1=0x00; //P1端口输出07

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论