2

次のコード セグメントがあります。

for ( SID_AND_ATTRIBUTES* it = ptg->Groups; end != it; ++it )
    if ( EqualSid( it->Sid, pAdminSid ) )
        break;

bIsAdmin = end != it;

腹立たしいことに、VS でステップバイステップのデバッグを行うと、最後の行が各 for 反復で実行されます。上記のコード セグメントが次のように動作することを期待していました。

for ( SID_AND_ATTRIBUTES* it = ptg->Groups; end != it; ++it ) {
    if ( EqualSid( it->Sid, pAdminSid ) )
        break;
}

bIsAdmin = end != it;

なぜそうではないのか、誰かが説明できますか?

4

1 に答える 1

3

「セミコロンが1つしかない」場合は、中かっこは必要ありません。念のため、私はコードに中かっこを追加するのが好きな人の1人です。痛くない、本当に...

ステッピングの動作に関しては、VisualStudioデバッガーとEclipseデバッガーの両方でこれを確認しました。これは「ループの終わりはある行にある必要がある」ことを反映していると思います。したがって、終了中括弧がない場合、ループ内の最後の行には「ループが終了しました」というステップが含まれます。それは確かに迷惑です。

于 2013-02-23T11:29:54.490 に答える