我不明白这意味着什么。 我已经认为这可能意味着代码在我的问题的代码片段中:
Skipping switch cases via false loop is a valid operation?
但是,由于回答者只是在改进代码而忽略了我对c99引用的问题,我现在明确地问这里:
如果switch语句在一个范围内有关联的case或default标签 具有可变修改类型的标识符,整个switch语句应在 该标识符的范围.135)
这是脚注:
135)也就是说,声明要么在switch语句之前,要么在最后一个case之后 与包含声明的块中的开关关联的默认标签。
任何人都可以如此友好地用其他话语向我解释一下吗? 谢谢你的努力。
答案 0 :(得分:3)
首先请注意,此句子仅适用于可变修改类型的标识符,即在其描述中某处具有动态数组维度的类型。对于n
一个类似
double a[n];
unsigned (*B)[n][n];
与此类标识符关联的对象的生命周期有一个特殊规则,它只在声明点开始,而对于其他类型,它从入口范围开始。
您引用的段落是为了确保case
语句的所有switch
根据该对象的生命周期具有相同的属性。对象的生命周期已经开始,在任何情况之前,或者只在case
(或default
)标签之后开始。
所以从本质上说它只是表明你不应该混合使用VLA(或类似的)和跳转语句,因为你不知道大小是什么以及数组的内存(如果有的话)有待分配。