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

当“只有一个分号”时,不需要大括号。尽管我是喜欢在我的代码中添加额外大括号的人之一,以防万一。从来不疼,真的……

至于步进行为,我在 Visual Studio 和 Eclipse 调试器中也看到了这一点。我认为它反映了“循环结束必须在某行” - 所以如果没有结束大括号,循环中的最后一行包含“循环结束”步骤。确实很烦人。

于 2013-02-23T11:29:54.490 回答