加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c:switch语句在close括号之前缺少分号

发布时间:2020-12-16 10:51:02 所属栏目:百科 来源:网络整理
导读:为了以后的读者和我自己的理智,我希望绝对清楚地表明,没有默认情况的switch语句(由于所有情况都被覆盖)或顺序if-elseif-else与最后的else应该不要做任何事情,不得省略,并包括对该效果的评论(见例). 但是,每当我在switch语句中包含默认大小写并将其保留为空时
为了以后的读者和我自己的理智,我希望绝对清楚地表明,没有默认情况的switch语句(由于所有情况都被覆盖)或顺序if-elseif-else与最后的else应该不要做任何事情,不得省略,并包括对该效果的评论(见例).

但是,每当我在switch语句中包含默认大小写并将其保留为空时,我必须在默认大小写或编译器错误中加一个分号:“Line [switch switch of line statement of line statement]`missing’;’在’}’之前发生.为什么?!

示例:生成编译器错误

switch(direction) {
    case MOVE_UP:
    //...
    break;
    case MOVE_RIGHT:
    //...
    break;
    case MOVE_DOWN:
    //...
    break;
    case MOVE_LEFT:
    //...
    break;
    default:
        /* DO NOTHING */
}

示例:不会产生编译器错误

switch(direction) {
    case MOVE_UP:
    //...
    break;
    case MOVE_RIGHT:
    //...
    break;
    case MOVE_DOWN:
    //...
    break;
    case MOVE_LEFT:
    //...
    break;
    default:
        /* DO NOTHING */;
}

解决方法

C 03中的6.1 / 1给出了带标签的语句的语法:

labeled-statement:
    identifier : statement
    case constant-expression : statement
    default : statement

C 11是相同的,除了您可以在标签之前具有属性.

零长度的标记序列不是C语句,因此默认情况下:它本身不是标记语句.

也就是说,我不知道为什么标签语句的语法不允许默认的原因是什么:statementopt.如果它确实存在,那么如果你写了默认值就会出现语法歧义:case 1:break;,无论是1还是break;是属于default的语句:,或者default:是否没有自己的语句,但后面紧跟一个语句.毫无疑问它意味着什么,但也许它被认为会弄乱人们的解析器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读