首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除printf("");会破坏我的程序!我收到错误:预期表达式“在切换大小写后生成字符

删除printf("");会破坏我的程序!我收到错误:预期表达式“在切换大小写后生成字符
EN

Stack Overflow用户
提问于 2020-04-02 16:13:22
回答 4查看 98关注 0票数 3

这是一个正常的错误,只会发生一个空白的方法吗?我使用了定制的Makefile btw。

代码语言:javascript
运行
复制
case MODE: //mode is just an enum stackoverflow

  printf("");

  char temp = '5';

CSftp.c:335:9:错误:需要表达式char temp = '5';

删除printf("");会导致出现错误。或者这是一个遥远问题的征兆。

EN

回答 4

Stack Overflow用户

发布于 2020-04-02 16:17:57

在没有被封闭的{..}块正确限定作用域的情况下,不应该在case中声明变量。一个很好的解释可以在here找到。在switch语句之前声明char temp,或者将case的代码括起来。

选项1:

代码语言:javascript
运行
复制
char temp; 
switch(condition){
    ...
    case MODE:
        temp = '5';
        ...
}

选项2:

代码语言:javascript
运行
复制
switch(condition){
    ...
    case MODE:
    {
        char temp = '5';
        ...
    }
    case NEXT:
        ...
}
票数 7
EN

Stack Overflow用户

发布于 2020-04-02 16:34:50

GCC 9.3有一个更容易理解的错误消息:

标签只能是语句的一部分,并且声明不是语句

也就是说,C的语法简单地禁止了这一点,因为case标签需要附加到语法语句中,而C中的声明不是语句。但是复合语句就是语句,这就是{…}围绕整个事情工作的原因。

票数 7
EN

Stack Overflow用户

发布于 2020-04-02 16:31:44

如果您想在这种情况下声明变量,请在此处添加代码块:

代码语言:javascript
运行
复制
switch(x)
{
    case MODE: //mode is just an enum stackoverflow
    {
        printf("");   

        char temp = '5';
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60986989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档