巧用do{...}while(0)
在学习第一门编程语言时,就已经介绍了顺序分支、条件分支、循环分支。比如循环分支有for、while、do-while语句。在随后的学校及工作中,如果手工循环一般使用for、while,很少使用do-while,感觉用处不大,但现在看来,do-while大有用途。
今天看了些有关do{...}while(0)秒用的文章,觉得写的很好,这里总结下分享给大家。
这里分享的有3个用法,分别是:
1.避免空的宏定义在编译时出现warning。
2.多个语句一起,定义成一个宏时,增加代码适应(特别是条件语句调用这类宏要注意)
3.避免部分goto语句的使用
1.避免空的宏定义在编译时出现warning
2.多个语句一起,定义成一个宏时,增加代码适应(特别是条件语句调用这类宏要注意),以下if(0)和if(1)在实际应用时是if(表达式),表示表达式假和真。
编译器预处理的时候
如果使用do{...}while(0)就可以解决上面的问题
这样就不会出现上面那种有逻辑上不该执行的代码被执行的问题。当然这里也可以用其他方法避免这个问题,比如加大括号{}
编译器会预处理下面语句
语句块宏定义时注意的就是这些,另外在写if语句时,尽量后面要加大括号,避免出错,例如上面的if(0){foo();},加上大括号{}也不会有问题。
3.避免部分goto语句的使用
这里就觉得很多代码冗余,然而使用沟通可以很好的解决冗余的部分,代码如下:
然后C语言中过多的使用goto语句会提高程序的灵活性,繁杂点的程序会让程序员捉摸不定,程序跳来跳出,难以捉摸,容易逻辑上产生混淆从而出现BUG。对于上面的这种情况使用do{...}while(0)就可以很好的解决这些跳来跳出的问题,代码结构如下:
愿你出走半生,归来仍是少年…