为什么ANSI C允许在switch语句中的任何case标签之前使用无关代码?
#include <stdio.h>
int main(void) {
const int foo = 1;
switch (foo) {
printf("wut\n"); /* no label, doesn't output */
case 1:
printf("1\n");
break;
default:
printf("other\n");
break;
}
return 0;
}
用
编译$ gcc -pedantic -Wall -Werror -Wextra -ansi test.c
它在没有警告的情况下进行编译并执行精细的操作“wut”。
答案 0 :(得分:1)
允许在<!--Adobe Edge Runtime-->
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<script type="text/javascript" charset="utf-8" src="edge/specialized/edge_includes/edge.5.0.1.min.js"></script>
<style>
.edgeLoad-EDGE-150750921 { visibility:hidden; }
</style>
<script>
AdobeEdge.loadComposition('edge/specialized/specialized', 'EDGE-150750921', {
scaleToFit: "none",
centerStage: "horizontal",
minW: "0",
maxW: "undefined",
width: "550px",
height: "309px"
}, {dom: [ ]}, {dom: [ ]});
AdobeEdge.bootstrapCallback(function (compId) {
console.log('composition loaded: ' + compId);
AdobeEdge.getComposition(compId).load("edge/specialized/specialized_edgeActions.js");
// do some other stuff on the page
});
</script>
<!--Adobe Edge Runtime End-->
中放置没有任何标签的语句。标准对此说:
在人工程序片段中
switch
标识符为
switch (expr) { int i = 4; f(i); case 0: i = 17; /* falls through into default code */ default: printf("%d\n", i); }
的对象存在自动存储持续时间(在块内),但从不 初始化,因此如果控制表达式具有非零值,则对i
函数的调用将 访问不确定的值。同样,无法达到对函数printf
的调用。