当希望通过由另一个雇员处理一些代码,我看到很多的代码写入:

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的)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top