2012-04-23 14 views
0

クイックワン。以下は同等ですか?そして、それらのうちのどれが他のものよりも経済的であるか「正しい」か?略語C whileループ

while (x==y) {},while (x==y) ; & while (x==y);

閉じる式の括弧と2番目のセミコロンのセミコロンとの間の空白に注意してください。

私は過去に最初のものを使用する傾向がありました。 Ta

+0

彼らは何をする予定ですか?待機をスピンさせるより良い方法があります。 – SLaks

+0

@SLaksは、条件が真ではないが特定のユースケース – Toby

答えて

3

2番目と3番目の違いはありません。

最初の唯一の違いは、読みやすさです。あなたは、あなたがタイプミス(余分な;)ではなく、無限ループが必要であることを明示しています。あなただけの通常、もちろん

while (whatever) 
    ; 

:あなたはこのような何かをやっていただきたいとき

2

これらはすべて正確に同等であり、半二重コンパイラと同じプログラムを作成する必要があります。空白は重要ではなく、{};の両方が空文を表します。

1

は通常、あなたはまだそれが明確にそれだけでacidentで追加されなかったことを確認するために独自の行にセミコロンを置きますやることwhateverは、次のような副作用を有する場合:

// skip to end of line: 
while (((ch=getchar()) != '\n') && (ch != EOF)) 
    ; 

使用する空の文の正確な構文形式がが生成されたコードに影響を与える可能性は極めて低いので、これは、読者のためではないの最適化については、純粋ですコンパイラ。

+0

または "x"がvolatileでない迄待つだけです。 – Toby

+1

@Toby:... or 'x'(または両方とももちろん) - それが私が「普通」と言った理由です。 「揮発性」は確かに可能ですが、それほど一般的ではありません。あなたがそれを扱っているときに、通常、このようなスピンループでやりたいとは思わないのです。 –

+0

清算してくれてありがとう。揮発性ポーリングにスピン・ループを使用したくないのはなぜですか? – Toby