gpt4 book ai didi

c++ - 默认在开关 block 的开头

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:28 26 4
gpt4 key购买 nike

在遍历解析器代码时,例如clang编译器的clang/Parse目录下的Parser.cpp

switch (Close) {
default: break;
case tok::r_paren : LHSName = "("; DID = diag::err_expected_rparen; break;
case tok::r_brace : LHSName = "{"; DID = diag::err_expected_rbrace; break;
case tok::r_square: LHSName = "["; DID = diag::err_expected_rsquare; break;
case tok::greater: LHSName = "<"; DID = diag::err_expected_greater; break;
case tok::greatergreatergreater:
LHSName = "<<<"; DID = diag::err_expected_ggg; break;
}

我看到 default 在开头。有什么理由保持这种状态吗?通常我们将 default 放在最后,所以我有点困惑。

最佳答案

顺序没有区别,只要您包含了break即可。

顺便说一句,我喜欢在每个 casedefault 之前立即放置 break。验证此规则是否得到遵守要比尝试提前查看每个案例语句的末尾要容易得多。

switch (Close) {
break; default:
break; case tok::r_paren : LHSName = "("; DID = diag::err_expected_rparen;
break; case tok::r_brace : LHSName = "{"; DID = diag::err_expected_rbrace;
break; case tok::r_square: LHSName = "["; DID = diag::err_expected_rsquare;
break; case tok::greater: LHSName = "<"; DID = diag::err_expected_greater;
break; case tok::greatergreatergreater: LHSName = "<<<"; DID = diag::err_expected_ggg;
}

如果您将 break 解释为 “不要从任何其他案例中掉入此案例,您可能会发现这更容易理解。” 而不是 “不要通过这个案例进入任何后续案例。”

在这种布局中,很容易看出是否缺少 break,因此迫使作者(和读者)问他/她自己“我想在这里跟进吗? ?”。所有的 break 都很好地排列在一起,如果缺少一个,它会非常明显。

澄清:我的回答中没有“魔法”。我只是以一种对我来说更具可读性的方式放置我的空白。空格无关紧要,因此我可以自由地这样做。 switch 末尾的 break 是多余的。如果缺少,则不允许编译器循环到 switch 的顶部,就好像它是某种 while 循环一样。同样,switch 开头的冗余 break 不会改变任何内容,并且必须被编译器接受(并忽略)。

关于c++ - 默认在开关 block 的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com