I recently came across the code snippet shown below, I was expecting it to be a syntax error but to my surprise, the code produces valid output.
#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
Compiler: GCC 6.3
I found a similar problem but it is not justifying above condition completely, Mixed 'switch' and 'while' in C
Can anyone explain,
- What exactly happening here?
- Why isn't it a syntax error?
- Why case '3' is skipped?