7

またはfuncを返す関数があります。戻るまで、呼び続けたいです。これを行うための最も厄介な方法は何ですか?truefalsefuncfalse

do {
  // do nothing
} while (func());

また..

while (func());

また..

while (func())
  if (!func())
    break;

それらのすべては私には本当にぎこちなくて直感的ではないように見えます。これに対する別の解決策はありますか?

4

4 に答える 4

10

オプションBが最も一般的に使用されていると思いますが、ループ本体が空であることをより明確にする必要があります。

while (func())
  ; // do nothing

また

while (func())  { /* do nothing */ }

ちなみに、これはある種の忙しい待機のように見えます。この場合、OSが提供する同期プリミティブを使用することで、回避でき、通常は回避する必要があります。

于 2012-04-10T22:13:35.100 に答える
9

私は以前書いていました

while (func()) continue;

完全なビジーウェイトループが必要なとき(それほど頻繁ではありませんでした)。キーワードは意図を見逃しにくくし、コンパイルされてしまいます。:)

于 2012-04-10T22:23:23.793 に答える
1

オプションBのバリエーション:

while (func())
{
    // no-op
}
于 2012-04-10T22:16:06.103 に答える
0

さて、3番目は何か違うことをします-それはfunc反復ごとに2回呼び出します。

私はあなたが2番目のものが欲しいと思います、そしてそれは他の人々を全く混乱させません。

于 2012-04-10T22:14:39.453 に答える