【问题标题】:Inside Switch Case - Variable Definition Related内部开关盒 - 变量定义相关
【发布时间】:2016-11-04 05:33:58
【问题描述】:

在这段代码中,为什么我得到 i = “一些垃圾值”作为输出?我看到 i 被声明但 value = 10,未分配。为什么?

main()
{
int a =1;
switch (a)
{
int b = 10;
case 1: printf ("b = %d \n", b);
break;
}

【问题讨论】:

  • 使用-Wall 编译并修复警告。

标签: c gcc switch-statement declaration


【解决方案1】:

b 没有被初始化。分配在 switch 中的任何 case 之外,因此它会选择当时堆栈中的任何内容。

【讨论】:

  • 如果我这么说会不会错,分配是在执行阶段完成的,而声明已经由翻译器完成。在执行期间,从堆栈中获取一个随机值。
  • 如果我这么说会不会错,分配是在执行阶段完成的,而声明已经由翻译器完成。在执行期间,从堆栈中获取随机值? @Pablo Alcubilla
  • 就是这样。编译器为所有变量分配内存。然后在执行时初始化它们。
  • 谢谢@Pablo Alcubilla
【解决方案2】:

如果你想在 case 语句中添加一个变量,正确的做法是:

switch(a)
{
 case 1:
 {
  int b=10; //start a new block scope
  printf("b=%d",b);
 }
 break;
}

【讨论】:

  • 我知道,但您分享的解决方案改变了我的需求。在您的代码中声明的 int b 不会被其他情况访问。无论如何,但这不是我想讨论的事情。我只是想了解为什么我的代码表现出意外。 @Akshay Immanuel
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多