使用do-while(0)的目的是确保宏能被完整的执行 因为宏是简单的代码替换 对于含有多条语句的宏 如果不使用do-while(0)的结构 在某些情况下宏展开会出现错误 错误示例1 #define CUBE(a, b) \ a = a * a * a; \ b = b * b * b; 对于上面这种含有多条语句的宏定义 该宏没有使用大括号{}结构,没...
1.宏定义单条语句: #define PI 3.14159 // 定义圆周率pi的值 2.宏定义多条语句:中间用逗号或百分号,两头加大括号。 #define SendIIC(Data) { IICDS = Data, IICCON = 0xaf;}
宏定义多条语句可以用如下的形式进行定义:define swap(a,b) { a = a + b; b = a - b; a = a - b; }// 如果分行写,可以写成如下形式#define swap(a,b) { a = a + b;\b = a - b;\a = a - b;} 宏定义一般分为带参宏定义和不带参宏定义。带参宏定义,也即带...
宏定义中使用do-while(0)的目的是确保宏能被完整执行。C语言中的宏,本质上是对代码的简单替换。对于含有多条语句的宏定义,不使用do-while(0)可能导致宏展开错误。错误示例1:当宏定义没有使用大括号{}、if(0){}或do-while(0),若在调用宏时条件不满足,宏展开后的代码仍然执行所有语句,如“...
宏定义多条语句可以用如下的形式进行定义:宏定义一般分为带参宏定义和不带参宏定义。带参宏定义,也即带参数的宏定义,如:不带参宏定义,也即不带参数的宏定义,如:Lisp类语言如Common Lisp和Scheme有更精巧的宏系统:宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。
在查看 FreeBSD 和 linux 系统代码时,不难发现其中会出现很多的宏定义,它们中包含了多条语句。为确保语句被完整执行,会使用 do { ... } while(0) 来包含所有要执行的语句。如: #define MYPRINT(a, b) \ do { \ printf(#a " = %d\n", (a)); \ ...
当为1时,上拉寄存器是禁止的。这里我们把它禁止掉GPBUP=0xffff;说到这里,应该差不多了。可以亮,可以灭,但是要闪烁,我们必须还需要一个延时程序。delay:sub r0,r0,#1 cmp r0,#0x0 bne delay mov pc,lr 现在作为一个LED闪烁的必要准备工作已经完成了,下面就是凑成一个完整的程序就OK了。
百度试题 题目当宏定义中需要定义变量或标号时,为了避免多次调用出现重复定义的错误,必须用___伪指令列出所有的变量或标号,且该语句只能作为宏体中的第___条语句。相关知识点: 试题来源: 解析 LACAL 1 反馈 收藏
单片机C语言#define宏定义多条语句,在单片机编程过程中,有时候需要反复操作多条同相语句,这时候运用#define宏定义多条语句可以大大简化编程内容。语法规则如下:1.宏定义单条语句:#definePI3.14159//定义圆周率pi的值2.宏定义多条语句:中间用逗号或百分号,两头加大括