zoukankan      html  css  js  c++  java
  • a label can only be part of a statement and a declaration is not a statement” error

    The “a label can only be part of a statement and a declaration is not a statement” error occurs in C when it encounters a declaration immediately after a label.

    The C language standard only allows statements​ to follow a label. The language does not group declarations in the same category as statements.

    出错原因:C语言标准在标签后不允许存在变量定义语句。

    以下代码端会抛出此错误:

    #include<stdio.h>
    
    int main() {
      char * str1 = "hello";
      goto Here;
      
      Here:
      char * str2 = " world";
      printf("%s %s", str1, str2);
      return 0;
    }

    Note how str2 is declared immediately after the Here: label on line 88. The solution to this error​ is to add a semi-colon after the label. The compiler will translate it as a blank statement and ​not throw the error. The following code snippet implements this fix: 

    解决办法:在冒号后加分号

    #include<stdio.h>
    
    int main() {
      char * str1 = "hello";
      goto Here;
      
      Here: ; // 加分号semi-colon added after the label.
      char * str2 = " world";
      printf("%s %s", str1, str2);
      return 0;
    }

    The error can also occur when using switch statements in C, as ​the language treats cases similar to labels. Consider the following error scenario: 

    #include<stdio.h>
    
    int main() {
      char option = 'a';
      switch (option)
      {
        case 'a':
          char * str = "Case 'a' hit.";
          printf("%s", str);
          break;
      }
    }

    The solution is the same as before; a​ semi-colon needs to be added after the case 'a' statement on line 77. Alternatively, the entire case can be enclosed in curly braces to circumvent the error. The following code snippet implements both ways of fixing this error:

    • 分号(Semi-Colon)
    • 大括号(Curly-Braces)
    #include<stdio.h>
    
    int main() {
      char option = 'a';
      switch (option)
      {
        case 'a': ;
          char * str = "Case 'a' hit.";
          printf("%s", str);
          break;
      }
    }
  • 相关阅读:
    怎样理解 DOCTYPE 声明
    怎样理解 Vue 组件中 data 必须为函数 ?
    怎样在 Vue 里面使用自定义事件将子组件的数据传回给父组件?
    怎样在 Vue 的 component 组件中使用 props ?
    怎样创建并使用 vue 组件 (component) ?
    怎样在 Vue 中使用 v-model 处理表单?
    怎样理解 MVVM ( Model-View-ViewModel ) ?
    怎样在 Vue 中使用 事件修饰符 ?
    怎样在 Vue 里面绑定样式属性 ?
    怎样使用 Vue 的监听属性 watch ?
  • 原文地址:https://www.cnblogs.com/jopny/p/14512349.html
Copyright © 2011-2022 走看看