迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C中 A Label Can Only Be Part of a Statement and a Declaration Is Not a Statement 错误

作者:迹忆客 最近更新:2023/03/29 浏览次数:

在使用任何编程语言进行编程时,我们都会遇到导致程序运行异常或暂停程序直到错误解决的错误。 本文将讨论一种称为 a Label Can Only Be Part of a Statement and a Declaration Is Not a Statement ,它只出现在 C 语言中。

C 中 a Label Can Only Be Part of a Statement and a Declaration Is Not a Statement 错误

错误就是程序员的一些意想不到的情况或非法行为,导致程序无法正常运行。 根据它们的影响,这些错误有多种类型。

但是,有些错误并非在所有编程语言中都常见,而是仅在特定语言中出现。 其中一个错误是 a Label Can Only Be Part of a Statement and a Declaration Is Not a Statement

当声明紧跟在标签之后时会发生此错误。 但是,C 语言标准只允许语句跟在标号之后,而不是声明。

C 语言中的标签是指代源代码中特定位置的字符序列。 标签与程序中的 goto 语句一起使用。

它将使用类似于以下代码的内容:

#include<stdio.h>

int main() {
    goto TARGET;

    TARGET:
    printf("Hello World");
    return 0;
}

输出结果:

Hello World

每当到达 goto 语句时,程序控制跳转到程序中指定的标签。 正如您在上面的程序中所见,输出已成功打印,因为标签 TARGET 后跟有 printf 语句。

然而,如果我们试图在标签之后声明一个变量,同样的代码就会给我们一个错误,因为 C 语言标准不允许在标签之后立即声明。 因此,程序会抛出 a Label Can Only Be Part of a Statement and a Declaration Is Not a Statement 错误。

让我们看一个抛出此类错误的示例:

#include<stdio.h>

int main() {
    goto TARGET;

    TARGET:
    char * s = "Hello World";
    printf("%s", s);
  return 0;
}

输出结果:

.ex1.c: In function 'main':
.ex1.c:7:5: error: a label can only be part of a statement and a declaration is not a statement
     char * s = "Hello World";
     ^

如输出所示,提到了错误 a label can only be part of a statement and a declaration is not a statement。 而且指定的问题行也已经显示出来了,就是标签 TARGET 之后的声明语句。

然而,如果声明没有紧跟在标签之后,程序就可以正常运行。 让我们也看一个例子。

#include<stdio.h>

int main() {
    goto TARGET;

    TARGET:
    printf("%d", 2+5);
    char * s = "Hello World";
    printf("%s", s);
  return 0;
}

输出结果:

7Hello World

因此,错误 a label can only be part of a statement and a declaration is not a statement 只有在程序中声明紧跟在标签之后才会出现。 当我们在标签和声明之后添加 printf 语句时,没有抛出任何错误。


在 C 中使用 switch 语句时标签只能是语句的一部分而声明不是语句错误

在C语言中使用 switch 语句也会出现标号只能是语句的一部分而声明不是语句的错误,这是因为C语言对 case 的处理类似于标号。

因此,每当我们尝试在 case 之后声明任何内容时,都会向用户抛出标签只能是语句的一部分而声明不是语句的错误。

让我们看一个相同的例子:

#include<stdio.h>

int main() {
  char ch = 'A';
  switch(ch)
  {
    case 'A':
      char * s = "Case A";
      printf("%s", s);
      break;
  }
}

输出结果:

.ex1.c: In function 'main':
.ex1.c:8:7: error: a label can only be part of a statement and a declaration is not a statement
       char * s = "Case A";
       ^

因此,正如您在上面的输出中看到的,当我们尝试在案例 A 之后立即声明变量 s 时,在 C 中使用 switch 语句时会抛出相同的错误。


在 C 中避免 a label can only be part of a statement and a declaration is not a statement 错误的方法

现在,我们将讨论如何解决这个错误 a label can only be part of a statement and a declaration is not a statement

我们可以通过简单地在标签后面放一个分号来避免这个错误。 编译器会将分号视为空白语句,不会抛出错误。

让我们借助一个例子看看上面的解决方案。

#include<stdio.h>

int main() {
    goto TARGET;

    TARGET: ;
    char * s = "Hello World";
    printf("%s", s);
  return 0;
}

输出结果:

Hello World

现在,我们可以在上面的代码中看到,通过在标签 TARGET 之后添加一个分号,我们可以在标签之后立即声明变量 s。 它不会抛出标签只能是语句的一部分而声明不是语句的错误。

如前所述,在处理 switch 语句时也会发生同样的错误,因为 case 被认为类似于 C 语言中的标签。

因此,要解决 switch 语句中的错误,我们可以在 case 后面添加一个分号,或者在 switch 语句中的 case 块周围放置花括号。 任何一种方法都可以解决我们的错误。

让我们看一下案例后带有分号的代码:

#include<stdio.h>

int main() {
  char ch = 'A';
  switch(ch)
  {
    case 'A': ;
      char * s = "Case A";
      printf("%s", s);
      break;
  }
}

输出结果:

Case A

因此,正如你所看到的,仅仅通过添加一个分号,就解决了 a label can only be part of a statement and a declaration is not a statement 的错误。

现在,让我们通过在标签块周围添加一对花括号来解决错误。

#include<stdio.h>

int main() {
  char ch = 'A';
  switch(ch)
  {
    case 'A':
    {
      char * s = "Case A";
      printf("%s", s);
      break;
    }
  }
}

输出结果:

Case A

我们通过在案例 A 的语句周围添加一对大括号解决了这个错误。


总结

在本文中,我们详细讨论了标签只能是语句的一部分而声明不是语句的错误。 C 语言标准只允许在标签后声明,而不允许在导致错误抛出的标签后立即声明。

为了解决这个错误,我们可以在 C 中的 switch 语句的情况下,在标签后面使用一个分号,并在标签块周围使用一对大括号。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便