这是仅使用空白方法就会发生的正常错误吗?顺便说一句,我使用了自定义 Makefile。
case MODE: //mode is just an enum stackoverflow
printf("");
char temp = '5';
Run Code Online (Sandbox Code Playgroud)
CSftp.c:335:9: 错误:预期表达式 char temp = '5';
删除 printf(""); 导致错误出现。或者这是来自遥远问题的症状。
变量不应在case没有被封闭{..}块正确限定范围的情况下在 a 中声明。一个很好的解释可以在这里找到。声明char tempswitch语句之前或包围的情况下的代码。
选项1:
char temp;
switch(condition){
...
case MODE:
temp = '5';
...
}
Run Code Online (Sandbox Code Playgroud)
选项 2:
switch(condition){
...
case MODE:
{
char temp = '5';
...
}
case NEXT:
...
}
Run Code Online (Sandbox Code Playgroud)
GCC 9.3 有一条更容易理解的错误信息:
标签只能是声明的一部分,声明不是声明
也就是说,C 的语法只是禁止这样做,因为case需要将标签附加到句法语句,而 C 中的声明不是语句。但复合陈述是陈述,这就是为什么用{…}作品围绕整个事情。