c语⾔中switch语句容易引发的错误
⾸先来看下⾯⼀段代码
#include <stdio.h>
switch的用法c语言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专家编程》⼀书将这个错误归结为语⾔的特性

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。