题
当希望通过由另一个雇员处理一些代码,我看到很多的代码写入:
do{
...
}while(false);
这是否提供什么优点(如果有的话)?
下面是更是在代码发生的骨架的:
try{
do{
// Set some variables
for(...) {
if(...) break;
// Do some more stuff
if(...) break;
// Do some more stuff
}
}while(false);
}catch(Exception e) {
// Exception handling
}
<强>更新强>
<强> C ++版本:强>结果 是做,而假环路通用?
解决方案
也许这是为了能够跳出“循环”在任何时候,e.g:
do
{
...
if (somethingIsWrong) break;
//more code
...
}
while(false);
但是,正如其他人所说的,我不会做这样的。
其他提示
在Java中,没有理由这样做。
在C,这是定义宏当公共成语:
考虑:
#define macro1 doStuff(); doOtherStuff()
#define macro2 do{ doStuff(); doOtherStuff(); } while( false )
if( something ) macro1; // only the first statement in macro1 is executed conditionally
if( something ) macro2; // does what it looks like it does
...但在C宏是邪,应该避免,如果在所有可能的。
请问你的同事来自一个C的背景?
没有优势。不这样做。
它可以用来去其可用于避免嵌套一堆块的端部的if / then块。
do {
if (done()) continue;
// do a bunch of stuff
if (done()) continue;
// do a bunch more stuff
if (done()) continue;
// do even more stuff
} while (false);
这是用C用于限定内部宏块。请参阅此例如
实施例,以下是无效:
#define f(x) { g(x); h(x); }
if (x >= 0) f(x); else f(-x);
但这一定义,它将工作:
#define f(x) do { g(x); h(x) } while(false)
它是没用的,但编码器可以使用一个多休息命令以执行一些奇怪的异常处理。
do{
if(<something>){...}else{break}
if(<something else>){...}else{break}
...
}while(false)
授予其愚蠢,但我没有找到一个旧的C程序像曾经
您直觉是正确的。即做一个完全无用的东西。
这是的可能的,不管是谁编码它原本不是false
其他东西作为条件,并简单地将其改为false
而不是删除整个块不失去这个代码的“历史”。这是一个公正的救命稻草。然而。坦率地说这是一个同义反复,它没有只是一个简单的例子放在代码。
在几乎比C / C以外的每一种语言++这提供没有战术优势。
在C / C ++存在与宏哪里/同时(假)可以更容易地安全地扩展宏成多个语句的情况。这是有利的宏观否则看起来像一个正常的函数调用。
有一个在此问题
在OP询问此确切构造和解释了一些原因使用它。共识似乎是,这是一个坏的事情。
作为用于将来的占位符当一些其他条件到位false
的。
它可以用来跳过一些代码(如goto
或东西),但是当我再次看,似乎有一个for
环(其中if(...) break;
语句)在do-while
执行。否则,我会说,这将是一个goto
的Java版本...
我用这个约定年!当你有一个处理和/或条件检查的“管道”这是最有用的。它只是避免嵌套if()语句的多个级别,从而使得代码(多)更易于阅读。是有喜欢的try / catch替代品,我只在某些薄/低级别的情况下使用这种风格。
我启动“循环”(实际上从未环路)与评论像...
// Error loop (never loops)
在错误环是...
set errorCode = fail;
do {
if (this)
break;
if (that)
break;
// Success
set errorCode = ok;
// Alternative Success
errorCode = doWhatever();
} while (false);
如果你有一堆嵌套的if()语句和你的缩进去3级以上的深考虑这种风格。
我用这个约定在Perl,C / C ++,Java和的Delphi /帕斯卡。
我要猜测的是,笔者不相信他的代码,让他用来运行它几次,看是否使工作更多,这是该考古遗址。
我能想到的唯一原因是为了创建一个块,使{...}
更限定范围内声明的变量,但也有这样做的更好的方法(如创建功能,或只是创造块 - 帽尖皮特Kirkham的)