do{}while(0)的作用

在微博上看到有人分享这个问题,自己看代码少,似乎没有主要到有这样写的。但看了回答,觉得这样写还是很有理由的。整理总结一下吧。原问题贴:segmentfault.com ,另一个参考链接:cnblogs.com 1、有时候只是为了代码分块,比仅仅使用{}更直观些。 这样使用大括号,可以产生块级作用域,可以定义自己的局部变量,而不和括号外的变量产生冲突。

块级作用域。避免 {} 块里面的变量名扩散到上层作用域中。好处是减少外层作用域中需要记忆的名字的数量,减少误用这些变量的可能性。

在 C++ / Java 等支持块级作用域的语言中常见。gcc 还支持只写大括号:

2、当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do while循环中,则能用break达到这个目的。其实就是变形的goto。前段时间Apple的goto漏洞大家应该都听说了吧以及自从学习C语言,老师就教导大家,不要用goto!

3、这样做也可以是兼容各种编译器。

这种代码在只支持C89的编译器上是编译不过去的,比如ADS 2.0。

4、为了展开的时候不会出错。如果直接放在花括号里会出错的
假如a, b分别是两条c语句,定义一个顺序执行他们的宏有几种写法,比如:

前面几个都是有问题的,只有do while(0)解决得比较好。

似乎就是这些。留作笔记吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注