ISO / IEC 9899 6.8.4.2 - > 2短语是什么意思?

时间:2013-08-27 07:55:31

标签: c c99

我不明白这意味着什么。 我已经认为这可能意味着代码在我的问题的代码片段中:

Skipping switch cases via false loop is a valid operation?

但是,由于回答者只是在改进代码而忽略了我对c99引用的问题,我现在明确地问这里:

  

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

这是脚注:

  

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

任何人都可以如此友好地用其他话语向我解释一下吗? 谢谢你的努力。

1 个答案:

答案 0 :(得分:3)

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

的变量
double a[n];
unsigned (*B)[n][n];

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

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

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