【问题标题】:How does a variable declared in switch statement out of case work? [duplicate]在 switch 语句中声明的变量是如何工作的? [复制]
【发布时间】:2018-01-15 04:20:09
【问题描述】:

代码:

#include <stdio.h>

int main (void)
{
    int a = 1;

    switch(a) {
        int t= 4;
    case 1:
        printf("%d", t);
        break;
    default: //Does not mean anything just for clarity
        break;
    }
}

C11 gcc 中的结果: 1

问题:为什么会这样?编译器不应该给出错误吗? 如果 a 为 1,它不应该直接跳转到 case 1 吗?为什么要打印 1?

【问题讨论】:

  • 您使用了哪些确切的编译选项?您是否使用 -Wall 来获取所有警告?
  • 为什么会这样?你认为为什么会这样?你认为你已经用4初始化了t,当你打印t你得到1。它真的有效吗?
  • 我认为投票欺骗这个问题的人读得很懒。
  • 编译发布的代码会导致编译器输出:“10:9: warning: 't'' may be used uninitialized in this function [-Wmaybe-uninitialized]” 这就是你需要知道的.该代码无法如您所愿。
  • 它的构建是因为在 C 中,变量可以在声明后的声明范围(大括号)中的任何地方使用。 switch 中的 int t 是编译器为变量保留空间的指令,无论语句是否执行,该空间都存在。但是,变量只有在语句被执行时才有值。

标签: c variables switch-statement


【解决方案1】:

t 已在当前范围内声明,因此没有理由出错。 现在,但是您永远不会经历在任何标签之前进行的初始化,因此它可以具有任何值。让我感到困惑的是,它是否有任何理由巧合地等于 1。

【讨论】:

  • 未定义的行为意味着任何事情都可能发生
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2013-01-15
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多