文章目錄
- C語言switch你不知道的一些事情
- C語言switch的“BUG”
- switch的default只能放在最后嗎?
- switch的case中可以宣告變數嗎?
C語言switch你不知道的一些事情
C語言switch的“BUG”
先拋出一個問題,下面的code運行結果是什么?
#include<stdio.h>
int main()
{
int a=2;
switch(a)
{
a=3;
case 2:
printf("a is %d.\n",a);
break;
case 3:
printf("a is %d.\n",a);
break;
default:
break;
}
return 0;
}
運行結果如下👇

為什么會是2呢?
因為C語言會忽視(ignore) switch陳述句與第一個case之間的code,也就是根本沒有執行 “a=3;”這條陳述句
所以同學們之后一定要注意不要在switch陳述句與第一個case之間加任何code
switch的default只能放在最后嗎?
答案不是的,其實可以放在switch的任何位置,Demo code如下👇
#include<stdio.h>
int main()
{
int a=2;
switch(a)
{
default:
printf("Not matching any cases.\n");
break;
case 2:
printf("a is %d.\n",a);
break;
case 3:
printf("a is %d.\n",a);
break;
}
return 0;
}
運行結果如下👇

switch的case中可以宣告變數嗎?
可以的,但是case之后緊鄰的下一條陳述句不能是變數宣告陳述句,否則編譯會報錯,Error code如下👇
#include<stdio.h>
int main()
{
int a=2;
switch(a)
{
case 2:
int b=3;
printf("a+b is %d.\n",a+b);
break;
case 3:
printf("a is %d.\n",a);
break;
default:
printf("Not matching any cases.\n",a);
break;
}
return 0;
}
編譯報錯
[Error] a label can only be part of a statement and a declaration is not a statement
正確code1如下👇
#include<stdio.h>
int main()
{
int a=2;
switch(a)
{
case 2:
; //加一個‘;’表示插入一個空陳述句
int b=3;
printf("a+b is %d.\n",a+b);
break;
case 3:
printf("a is %d.\n",a);
break;
default:
printf("Not matching any cases.\n",a);
break;
}
return 0;
}
正確code2如下👇
#include<stdio.h>
int main()
{
int a=2;
switch(a)
{
case 2:
//加入一對花括號,變成一個陳述句塊
{
int b=3;
printf("a+b is %d.\n",a+b);
break;
}
case 3:
printf("a is %d.\n",a);
break;
default:
printf("Not matching any cases.\n",a);
break;
}
return 0;
}
C語言的“bug”隱式型別轉換
C語言GOTO你不知道的一些事情

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/280234.html
標籤:其他
下一篇:C++---模板進階
