从单片机基础到程序框架(全集 2019pdf版).pdf - 第253页

第五十九节: 全局“一键替换”功能的#define。 【59.1 #define 作用和书写格式。 】 上一节讲 co nst 的时候,讲 到了当 某个常量在程 序中是属于需 要频繁更改的 “阀值” 的时候,用 c onst 就可以提供“ 一键更改” 的快捷服务 。本节的 #define 也具 有此功能, 而且功 能比 const 更加强大灵 活, 它 除了可以应 用在常量, 还可 以应用在运算 式以及函 数的 “一键更改” 中。 所谓…

100%1 / 836
1 个数
十进制:0
十六进制:0
二进制:0
2 个数
十进制:1
十六进制:1
二进制:1
3 个数
十进制:28
十六进制:1C
二进制:11100
4 个数
十进制:28
十六进制:1C
二进制:11100
分析:
a 0。
b 1。
c 28。
d 28。
【58.8 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第五十九节: 全局“一键替换”功能的#define。
【59.1 #define 作用和书写格式。
上一节讲 const 的时候,讲到了当某个常量在程序中是属于需要频繁更改的“阀值”的时候,用 const
就可以提供“一键更改”的快捷服务。本节的#define 也具有此功能,而且功能比 const 更加强大灵活,
除了可以应用在常量,还可以应用在运算式以及函数的“一键更改”中。所谓“一键更改”其实是说,#define
内含了“替换”的功能,“替换” word 办公软件的替换功能几乎是一模一样的#define “替换”
功能,除了在某些场合起到“一键更改的作用还可以在某些场合,把一些在字符命名上不方便阅读理解
的常量、运算式或函数先“替换”成容易理解的字符串,让程序阅读起来更加清晰更加方便维护。#define
的常见三种书写格式如下
#define 字符 常量 //注意,这里后面没有分号“;”
#define 字符 运算式 //注意,这里后面没有分号“;
#define 字符 函数 //注意,这里后面没有分号“;”
具体一点如下:
#define AA 1 //常量
#define BB (a+b+c) //运算式
#define C add() //函数
需要注意的时候,#define 后面没有分号“;”,因为它是 C 语言中的“预处理”的语句,不是单片机运
行的程序指令语句。
【59.2 #define 的编译机制。
#define 是属于“预编译”的指令,所谓“预编译”就是在“编译”之前就开始的准备工作。编译器在
正式编译个源的时,先行“译”的准作,#define ,编器是把#define
要替换的内容先在“编辑层面进行机械化替换,这个“机械化替换”纯粹是字符串的替换,可以理解成 word
办公软件的“替换”编辑功能。比如以下程序
#define A 3
#define B (2+6) //有括
#define C 2+6 //无括号
unsigned long x=3;
unsigned long a;
unsigned long b;
unsigned long c;
void main() //主函
{
a=x*A;
b=x*B;
c=x*C;
while(1)
{
}
}
经过编译器“预编译”的“机械化替换”后,等效于以下代码:
unsigned long x=3;
unsigned long a;
unsigned long b;
unsigned long c;
void main() //主函
{
a=x*3;
b=x*(2+6);
c=x*2+6;
while(1)
{
}
}
【59.3 #define 在常量上的“一键替换”功能。
上一节讲 const(或 code)的时候,举了一个“阀值”常量的例子,这个例子可以用#define 来替换等
效。比如,原来 const(或 code)的例子如下
code unsigned char Cu8Level=90; //需要调整“阀值”时,只需更改一次这里的“90”这个数值。
unsigned char a;
unsigned char b;
void main() //主函
{
if(89>=Cu8Level) //大于或者等于阀值,就输出 1
{
a=1;
}
else //否则输出 0
{
a=0;
}
if(95>=Cu8Level) //大于或者等于阀值,就输出 1
{
b=1;