删除 printf(""); 破坏我的程序!我收到错误:预期的表达式”在 switch case 后生成一个字符

Gre*_*son 3 c

这是仅使用空白方法就会发生的正常错误吗?顺便说一句,我使用了自定义 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(""); 导致错误出现。或者这是来自遥远问题的症状。

Rad*_*nce 7

变量不应在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)

  • 在案例中添加块作用域(例如“{ .... }”)并在其中声明变量是完全有效的。 (3认同)
  • 该建议是好的,但解释是错误的,并且至少它不能解释OP所看到的问题。 (3认同)

Kon*_*lph 7

GCC 9.3 有一条更容易理解的错误信息:

标签只能是声明的一部分,声明不是声明

也就是说,C 的语法只是禁止这样做,因为case需要将标签附加到句法语句,而 C 中的声明不是语句。但复合陈述是陈述,这就是为什么用{…}作品围绕整个事情。