我有以下简化代码:
#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(使用前将#替换为@)