首先来看下面一段代码
#include <stdio.h>
int main(int argc, char **argv)
{
int i = 5;
switch(i)
{
case 1: i++; break;
case 2: i+=2; break;
case 3: i+=3; break;
defauit:i+=4;
}
printf("%d", i);
return 0;
}
估计很多人第一眼看过去就会直接说输出为9,实际上这是错误的,正确结果为5
仔细看时你会发现代码中default打错了,但是为什么这么明显的错误却还能够正常运行呢?
实际上,switch的内部的任何语句都可以加上标签,并可以通过goto跳转到那里,编译器把defauit当成了一个标签,导致运行结果跟我们想的不同,在一个大工程中这种错误是很难被发现的,有人说这是c语言本身设计的bug所在,然而《C专家编程》一书将这个错误归结为语言的特性