让我们通过代码来看这个问题:
代码-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()
不执行,但在code2中int b
会执行。
为什么?
编辑:
我知道int b;
是声明并在编译时分配内存,因此无论控制流是否到达那里,该声明都将被执行。
现在看看这段代码
#include<stdio.h>
int main()
{
if(1)
{
int a;
}
a =1;
return 0;
}
在控制流路径中,int a仍然是受控制的,但这段代码无法编译通过...为什么?
b
的声明是int b = 31
,则不能保证初始化会发生。printf()
和声明之间的主要区别在于printf()
语句是可执行的,而声明不是。 - Jonathan Leffler