do {
...
}
while (0); // while (false)
的一点有用的小技巧:
1. 在宏里用:
看下面情况:
#define swap(x,y) { int tmp = x; x = y; y = tmp; }
使用时如果这样写:
if (condition) swap(a, b); else {...}
将被替换成:if (condition) {int tmp = x; x = y; y = tmp; } ; else { ... }
这样就会产生编译错误(if字句里的花括号后面多了分号)。避免出现这样问题的方法:
#define swap(x,y) do { int tmp = x; x = y; y = tmp; } while (0)
2. 替代goto语句:
goto语句破坏了程序的结构化,但是适当的使用恰到好处的goto语句有时非常有用,能少打很多代码,如:
int *p = new int;
...
if (condition1) {
delete p; // 冗余代码
return NULL;
}
else if (condition2) {
delete p; // 冗余代码
return NULL;
}
else if ...
...
return p;
这样,用goto 语句就能减少冗余的代码:
if (condition1) goto FAILURE ;
else if (condition2) goto FAILURE ;
else if ...
...
return p;
FAILURE:
delete p;
return NULL;
用do ... while 也可以达到同样效果,并且结构上更好:
int *p = new int;
...
do {
if (condition1) break ;
else if (condition2) break ;
else if ...
...
return p;
} while (0);
delete p;
return NULL;
do while 的两个小技巧
最新推荐文章于 2022-08-02 20:32:55 发布