从单片机基础到程序框架(全集 2019pdf版).pdf - 第258页
unsigned c har c; unsigned c har d; //第 3 个:函数的 例子 unsigned c har e=1; void a dd(void); void a dd(void) { e++; } #define a_zi_ji a add() //用字符串 a _zi_jia 来替 代函数 add()。 void main( ) //主函数 { //第 1 个:常量的 例子 if(89>=C u8Le…

#define 字符串 常量 U
#define 字符串 常量 L
具体一点如下:
#define AA 6U
#define BB 6L
常量加后缀“U”或者“L”有什么含义呢?字面上理解,U 表示该常量是无符号整型 unsigned int;L
表示该常量是长整型 long。但是在实际应用中这样“多此一举”地去强调某个常量的数据类型有什么意义呢?
我自己私下也做了一些测试,目前我本人暂时还没有发现这个秘密的答案。所以对于这个问题,初学者现在
只要知道这种写法在语法上是合法的就可以,至于它背后有什么玄机,有待大家今后更深的发掘。
【59.7 #define 省略常量的特殊写法。】
有些初学者今后在多文件编程中,在某些头文件.h 中,会经常遇到以下这类代码:
#ifndef _AAA_
#define _AAA_
#endif
其中第 2 行代码“#define _AAA_”后面居然没有常量,这样子的写法也行,到底是什么意思?在这类
写法中,当字符串“_AAA_”后面省略了常量的时候,编译器默认会给_AAA_添加一个“非 0”的常量,也许
是 1 或者其它“非 0”的值,多说一句,所谓“非 0”值就是“肯定不是 0”。上述代码等效于:
#ifndef _AAA_
#define _AAA_ 1 //编译器会在这类默认添加一个 1 或者其它“非 0”的常量
#endif
这个知识点大家只要先有一个感性的认识即可,暂时不用深入了解。
【59.8 例程练习和分析。】
现在编一个练习程序来熟悉#define 的用法。
/*---C 语言学习区域的开始。-----------------------------------------------*/
//第 1 个:常量的例子
#define Cu8Level 90 //需要调整“阀值”时,只需更改一次这里的“90”这个数值。
unsigned char a;
unsigned char b;
//第 2 个:运算式的例子
#define C (2+6) //有括号
#define D 2+6 //无括号
unsigned char x=3;

unsigned char c;
unsigned char d;
//第 3 个:函数的例子
unsigned char e=1;
void add(void);
void add(void)
{
e++;
}
#define a_zi_jia add() //用字符串 a_zi_jia 来替代函数 add()。
void main() //主函数
{
//第 1 个:常量的例子
if(89>=Cu8Level) //大于或者等于阀值,就输出 1。
{
a=1;
}
else //否则输出 0。
{
a=0;
}
if(95>=Cu8Level) //大于或者等于阀值,就输出 1。
{
b=1;
}
else //否则输出 0。
{
b=0;
}
//第 2 个:运算式的例子
c=x*C; //等效于 c=x*(2+6),最终运算结果 c 等于 24。因为 3 乘以 8(2 加上 6 等于 8)。
d=x*D; //等效于 d=x*2+6, 最终运算结果 d 等于 12。因为 3 乘以 2 等于 6,6 再加 6 等于 12。
//第 3 个:函数的例子
a_zi_jia; //这里相当于调用函数 add()。e 从 1 自加到 2。
a_zi_jia; //这里相当于调用函数 add()。e 从 2 自加到 3。

View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
View(d); //把第 4 个数 d 发送到电脑端的串口助手软件上观察。
View(e); //把第 5 个数 e 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:0
十六进制:0
二进制:0
第 2 个数
十进制:1
十六进制:1
二进制:1
第 3 个数
十进制:24
十六进制:18
二进制:11000
第 4 个数
十进制:12
十六进制:C
二进制:1100
第 5 个数
十进制:3
十六进制:3
二进制:11
分析:
a 为 0。