do..while(0)的由来 假设你需要定义一个这样的宏: #define DOSOMETHING()\ func1();\ func2(); 这个宏的本意是,当调用DOSOMETHING()时,函数func1()和func2()都会被调用。但是如果你在调用的时候这么写: if(a>0) DOSOMETHING(); 宏在预处理的时候会直接被展开,你实际上写的代码是
代码运行起来会显示0,这显然是不对的,0的位数是1,那如果用do-while循环是不是就可以把问题解决掉,在进入循环体之前不做判断,而是在执行完一轮循环体的代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环。 //初始化 Scanner in = new Scanner(System.in); int number = in.ne...
(5)上述问题无疑会给程序带来异常,那么do-while(0)的用途就出来了。 <1>处理了因为if语句所带来的问题。 <2>让程序更加美观。因为在每一条语句背后,我们都习惯性的加上“;”,但是在没有加do-while(0)的宏里面,最后一条语句不能加上“;”。这样容易导致阅读障碍。 /*** c文件 ***/ #define fun do...
我们在嵌入式开发的过程中,经常可以碰到在一些宏定义或者是代码段中使用了do {...} while(0)的语句,从语义上理解,do {...} while(0)内的逻辑就只执行一次,并没有循环执行,粗略看来,似乎画蛇添足了,那么为什么还需要在只执行一次的逻辑外面加上一层do {...} while(0)语句呢?实际上,在这些逻辑中使用...
如果你有一个复杂的函数,变量很多,而且你不想要增加新的函数,可以使用do{...}while(0),将你的代码写在里面,里面可以定义变量而不用考虑变量名会同函数之前或者之后的重复。 这种情况应该是指一个变量多处使用(但每处的意义还不同),我们可以在每个do-while中缩小作用域,比如: ...
0、引言 我们在嵌入式开发的过程中,经常可以碰到在一些宏定义或者是代码段中使用了do {...} while(0)的语句,从语义上理解,do {...} while(0)内的逻辑就只执行一次,并没有循环执行,粗略看来,似乎画蛇添足了,那么为什么还需要在只执行一次的逻辑外面加上一层do {...} while(0)语句呢?实际上,在这些逻...
2. 宏定义中的do...while(0) 如果你是C++程序员,我有理由相信你用过,或者接触过,至少听说过MFC, 在MFC的afx.h文件里面, 你会发现很多宏定义都是用了do...while(0)或do...while(false), 比如说: #define AFXASSUME(cond)do { bool __afx_condVal=!!(cond);ASSERT(__afx_condVal);__analysis_ass...
在嵌入式开发中,宏定义非常强大也非常便捷,如果正确使用可以让你的工作事半功倍。然而,在很多的C程序中,你可能会看到不是那么直接的比较特殊一点的宏定义,比如do{}while(0)。 do{conditional code}while(condition)结构 流程图如下: 一般结构如以下代码 ...
A 可以用for循环代替。B 不满足条件时即条件的逻辑值为假(0)时推出,break也可以。C while(条件),条件为真时进行循环,为假(0)时退出。D while(条件),条件为真时进行循环,为假(0)时退出, 用do-while语句构成的循环,只有在while后的表达式为零时结束循环,break 是可以退出循环,但...
1. do...while(0)消除goto语句。 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version 1 boolExecute() { //分配资源 int*p =newint; boolbOk(true); //执行并进行错误处理 bOk = func1(); if(!bOk) { delete...