C语言 – do{}while(0)编写单进单出函数

do{}while()这个语法在C编程中我自己很少使用,直到有一天读到了李先静先生的《系统程序员成长计划》,发现了它还有这种使用方法。

我们可以使用do{}while(0)来编写单进单出函数

在一些函数里,我们希望在函数的入口与出口处做一些配对的操作,比如内存的申请与释放、文件的打开与关闭、加锁与解锁等。在这样的函数里可以设计成单进单出,好处是后期维护不容易出错。

假设我们有一个函数,里面的操作存在竞争,那我们为它加上锁的机制,代码可能是这样:

上述函数的写法不是单进单出,即有很多出口,于是每个出口处都必须记得解锁。如果换成单进单出的写法,上述情况会变得简单一些,只需要记得在最后出口处解锁即可。

改进后的代码只需要记得不要在do{}while(0)代码块里使用return,而原先的代码需要在每一个return处检查是否解锁。个人认为还是do{}while(0)方法比较好记,而且当团队里的成员对do{}while(0)的用法熟悉了以后,一但看到此结构出现便可以条件反射般的意识到此函数有机关,使用return需谨慎。