我最近看到了下面的代码片段,本以为会出现语法错误,但令我惊讶的是,这段代码产生了有效的输出。
#include <stdio.h>
int main(void) {
int x = 2;
switch(x) {
case 1: printf("1"); break;
do {
case 2: printf("2 "); break;
case 3: printf("3 "); break;
} while(++x < 4);
case 4: printf("4"); break;
}
return 0;
}
output: 2 4
编译器:GCC 6.3
我发现一个相似的问题,但它并不能完全证明上述条件, C中混合使用'switch'和'while'
有人能解释一下:
- 这里到底发生了什么?
- 为什么不是语法错误?
- 为什么case '3'被跳过了?