讓我們從代碼中看到的問題:問題與switch語句
代碼1
#include <stdio.h>
int main(int argc, char *argv[])
{
int a =1;
switch (a)
{
printf("This will never print\n");
case 1:
printf(" 1");
break;
default:
break;
}
return 0;
}
這裏printf()
語句永遠不會執行 - 看http://codepad.org/PA1quYX3。但
代碼2
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 1;
switch (a)
{
int b;
case 1:
b = 34;
printf("%d", b);
break;
default:
break;
}
return 0;
}
這裏int b
將被宣佈 - 見http://codepad.org/4E9Zuz1e。
我不明白爲什麼在code1 printf()
不執行,但在代碼2 int b
即將執行。
爲什麼?
編輯: 我得到的INT B;是聲明,它是在編譯時分配內存,以便控制流是否到達那裏,否則該聲明將完成。
現在看到這個代碼
#include<stdio.h>
int main()
{
if(1)
{
int a;
}
a =1;
return 0;
}
這裏INT一個是控制流路徑仍然還是這不會編譯......爲什麼?
** [我的答案](http://stackoverflow.com/a/8535765/1090079)** to [當它的定義被繞過時如何使用變量?](http:// stackoverflow 。com/q/8535731/1090079)應該解釋發生了什麼 – 2011-12-19 05:04:42
請注意,如果'b'的聲明是'int b = 31',則不能保證初始化會發生。 printf()和聲明之間的主要區別在於'printf()'語句是可執行的,而聲明不是。 – 2011-12-19 05:32:27