c - 为什么标签的第一部分应该是声明?为什么不声明?

标签 c linux gcc

编译以下代码时出现编译错误。

#include <stdio.h>
main()
{
    printf("Hello 123\n");
    goto lab;
    printf("Bye\n");

lab: int a = 10;
     printf("%d\n",a);
}

当我编译这段代码时,它给出了

test.c:8: error: a label can only be part of a statement and a declaration is not a statement

为什么标签的第一部分应该是声明而不是声明?

最佳答案

因为这个特性叫做labeled statement

C11 §6.8.1 Labeled statements

Syntax

labeled-statement:

identifier : statement

case constant-expression : statement

default : statement

一个简单的解决方法是使用空语句(单个分号;)

#include <stdio.h>
int main()
{
    printf("Hello 123\n");
    goto lab;
    printf("Bye\n");

lab: ;         //null statement
    int a = 10;
    printf("%d\n",a);
}

关于c - 为什么标签的第一部分应该是声明?为什么不声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19829531/

相关文章:

c++ - 使用 mmap 与 fstream 或 fopen 访问二进制文件

linux - 使用 python 2.7 在 Ubuntu 14.10 或 Fedora 21 上运行 python Numba

c++ - gcc 的扩展初始化程序列出了警告

c++ - 从目标文件列表 (*.o) 构建库 (lib.a) 的 makefile

c++ - 完全特化的模板功能

凯撒密码问题(C)

c++ - 写入后跨进程读取文件一致性

c - 写表达式 : Infix, 后缀和前缀

linux - 关于可用于创建 docker 基本镜像的 linux 发行版的年龄是否有任何限制?

linux - Intel-64 和 ia32 原子操作获取-释放语义和 GCC 5+