记得看一段windows上的代码时遇到过这样的情况:在switch语句中得所有case之前加入了一个if语句的判断,当时很奇怪为什么在任何条件下都没有执行,后来才明白是自己理解错了switch的语法。
switch语句的语法如下:
switch(expression) { case constant1: statement sequence; break; case constant2: statement sequence; break; ... default: statement sequence; break; }语法会对expression进行case上的匹配,匹配成功则直接执行对应case中的语句,并不会流程般的执行其上或下得语句。
列举一个实例:
# include <stdio.h> void main() { char ch; scanf("%c", &ch); switch(ch) { printf("test switch\n"); /*这条语句是不会被执行到的*/ case 'a': printf("case : %c\n", ch); break; case 'b': printf("case : %c\n", ch); break; case 'c': printf("case : %c\n", ch); break; default: printf("case : not a/b/c\n", ch); break; } }执行情况如下:
可以看到,case之上的语句虽然在所有的case之前,但是switch匹配后并没有执行printf语句。