gpt4 book ai didi

c - 通过错误循环跳过 switch case 是有效的操作吗?

转载 作者:行者123 更新时间:2023-12-04 11:03:12 24 4
gpt4 key购买 nike

这是否符合法律法规或违反任何规则?

switch (expr)
{
do
{
case 6:
/*...*/

if (/*...*/)
break;
case 7:
/*...*/

} while (0);

case 9:
/*...*/

break;

default:
break;
}

这是否是先执行案例 6 再执行案例 7 的合法方式,但前提是满足某些条件?或者这会导致未定义的行为并让鼻龙从开关中出来吗?附:我的问题是指 c99。

编辑:

我想做的是:假设情况 9 必须在每种情况下执行。如果 expr 是 6,我必须执行 6,在某些条件下是 7,然后是 9,或者如果 expr 是 7,它的 7->9所以我只想在满足某些条件时跳过 7,但我不能更改 6、7、9 的顺序。

编辑2:

我不是在寻找替代解决方案,我只是对这段代码的行为感兴趣。

If a switch statement has an associated case or default label within the scope of an identifier with a variably modified type, the entire switch statement shall be within the scope of that identifier.

来自 ISO/IEC 9899:TC3 6.8.4.2->3

让我对它的行为感到不确定。但我不确定这样的目标代码是否也像我的代码片段一样。

最佳答案

虽然我相信上面的代码是有效的,但我会使其更明确:

case 6:
...

/* fall through */
case 7:
if (expr != 6 || condition_to_run_7)
{
do whatever 7 does;
}
if (should_not_do_9)

case 9:
...
break;

或者,哪个是更简洁的解决方案:将 6、7 和 9 案例的作用移到单独的函数中,并在 switch 语句中调用相关函数(如果需要,不止一次),并有适当的“中断”在每个案例之后...

关于c - 通过错误循环跳过 switch case 是有效的操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18210824/

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