在C中忽略变量定义

这个问题在这里已经有了答案:

  • switch语句中的变量定义5个答案

  • 因为内存将被分配给int b ,但当应用程序运行时,“ b = 20 ”将不会被评估。

    这是因为您的switch -statement会跳转到case 1: 1或default: :,跳过相关语句 - 因此b将被初始化并调用未定义的行为。


    以下两个问题(以及他们接受的答案)将进一步帮助您寻求答案:

  • 在定义被绕过时,如何使用变量? 2

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


  • 在编译源代码时,将编译器警告/错误更高级别有望为您提供此信息。

    以下是gcc关于此事的说法;

    foo.cpp:6:10: error: jump to case label [-fpermissive]
    foo.cpp:5:9: error:   crosses initialization of 'int b'
    

    1因为int a总是1(一)它总是会跳到这里。

    两个链接中最相关的两个,我回答。


    Switch语句只评估其中的代码的一部分,并且不能将代码放在顶部,并期望它被每个案例组件评估。 您需要将b初始化放在switch语句上方的程序中。 如果你真的需要在本地做到这一点,在一个单独的大括号中进行:

    码:

    int main()  
    {
      int a=1;
      /* other stuff */
      {
        int b=20;
        switch(a)
        {
    
          case 1:
          printf("b is %dn",b);
          break;
    
          default:
          printf("b is %dn",b);
          break;
        }
      }
      /* other stuff... */
      return 0;
    }
    

    switch直接跳转到case 1: :,从不执行任务。

    链接地址: http://www.djcxy.com/p/84445.html

    上一篇: Variable Definition Ignore in C

    下一篇: Variable definition inside switch statement