切换没有标签的语句代码

时间:2015-04-25 23:54:57

标签: c switch-statement c89

为什么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”

1 个答案:

答案 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--> 中放置没有任何标签的语句。标准对此说:

C11:6.8.4.2开关语句(p7):

  

在人工程序片段中

switch
     

标识符为switch (expr) { int i = 4; f(i); case 0: i = 17; /* falls through into default code */ default: printf("%d\n", i); } 的对象存在自动存储持续时间(在块内),但从不   初始化,因此如果控制表达式具有非零值,则对i函数的调用将   访问不确定的值。同样,无法达到对函数printf的调用