如果我有一个在标签之后初始化的变量,为什么我会收到“标签只能是语句的一部分,声明不是语句”? [复制]

2024-06-28

我有以下简化代码:

#include <stdio.h>
int main () 
{
    printf("Hello ");
    goto Cleanup;
Cleanup:
    char *str = "World\n";
    printf("%s\n", str);
}

我收到错误,因为在标签之后声明了一个新变量。如果我将标签后面的内容(主要是初始化)放在 {} 块中,编译就会成功。

我想我理解在开关的情况下阻止的原因,但为什么它应该适用于标签的情况?

该错误来自 gcc 编译器


语言标准根本不允许这样做。标签后面只能跟语句,并且声明不算作 C 中的语句。解决此问题的最简单方法是在标签后插入一个空语句,这使您无需按照需要的方式跟踪范围。在一个块内。

#include <stdio.h>
int main () 
{
    printf("Hello ");
    goto Cleanup;
Cleanup: ; //This is an empty statement.
    char *str = "World\n";
    printf("%s\n", str);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我有一个在标签之后初始化的变量,为什么我会收到“标签只能是语句的一部分,声明不是语句”? [复制] 的相关文章

随机推荐