相关疑难解决方法(0)

为什么不能在switch语句中声明变量?

我一直想知道这一点 - 为什么你不能在switch语句中的case标签之后声明变量?在C++中,您可以在任何地方声明变量(并且声明它们接近第一次使用显然是一件好事)但是以下仍然不起作用:

switch (val)  
{  
case VAL:  
  // This won't work
  int newVal = 42;  
  break;
case ANOTHER_VAL:  
  ...
  break;
}  
Run Code Online (Sandbox Code Playgroud)

以上给出了以下错误(MSC):

'case'标签跳过'newVal'的初始化

这似乎也是其他语言的限制.为什么会出现这样的问题?

c++ switch-statement

910
推荐指数
11
解决办法
26万
查看次数

绕过定义时如何使用变量?

在我看来,定义总是意味着存储分配.

在以下代码中,int i在程序堆栈上分配一个4字节(通常)存储并将其绑定到i,i = 3并将3分配给该存储.但是因为goto,定义被绕过,这意味着没有分配存储空间i.

我听说局部变量在函数的入口处(f()在这种情况下)分配在它们所在的位置,或者在定义点处.

但无论哪种方式,如何i在尚未定义的情况下使用它(根本没有存储空间)?执行时分配给值3的位置在哪里i = 3

void f()
{
    goto label;
    int i;

label:
    i = 3;
    cout << i << endl; //prints 3 successfully
}
Run Code Online (Sandbox Code Playgroud)

c++ scope variable-declaration

36
推荐指数
4
解决办法
1038
查看次数

switch语句中的变量定义

在下面的代码中,为什么变量i没有赋值1

#include <stdio.h>      

int main(void)
{   
    int val = 0;
    switch (val) {         
        int i = 1;   //i is defined here

        case 0:
            printf("value: %d\n", i);
            break;
        default:
            printf("value: %d\n", i);
            break;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我会收到一个警告,即i尽管int i = 1;它已经初始化,但仍未进行初始化

$ gcc -Wall test.c
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
    printf("value %d\n", i);
    ^
Run Code Online (Sandbox Code Playgroud)

如果val = 0,那么输出是0.

如果val = 1或其他任何东西,那么输出也是0.

请向我解释为什么i声明变量但在开关内没有定义.标识符 …

c initialization declaration switch-statement

13
推荐指数
2
解决办法
4022
查看次数