1

我不明白这是什么意思。我已经认为这可能意味着代码,就像我在这个问题的代码片段中一样:

通过错误循环跳过切换案例是有效的操作吗?

但是作为回答者只是在哪里改进代码并忽略了我关于 c99 报价的问题,我现在要在这里明确地问这个问题:

如果 switch 语句在具有可变修改类型的标识符范围内具有关联的 case 或默认标签,则整个 switch 语句应在该标识符的范围内。135)

这是脚注:

135) 也就是说,声明要么在 switch 语句之前,要么在与包含声明的块中的 switch 关联的最后一个 case 或默认标签之后。

谁能这么好心地向我解释一下?感谢您的努力。

4

1 回答 1

4

首先请注意,这句话仅适用于可变修改类型的标识符,即在其描述中某处具有动态数组维度的类型。对于n类似的变量

double a[n];
unsigned (*B)[n][n];

与这种标识符相关联的对象有一个特殊的生命周期规则,它只从声明点开始,而对于其他类型,它从进入范围开始。

您引用的段落是为了确保根据此类对象的生命周期,所有语句都具有相同的属性caseswitch在任何情况之前,对象的生命已经开始,或者它仅在任何case(或default)标签之后开始。

所以本质上它只是表明你不应该混合使用 VLA(或类似的)和跳转语句,因为你不知道大小是什么以及必须在哪里分配数组的内存(如果有的话) .

于 2013-08-27T08:20:11.150 回答