Cas*_*sey 3 c++ compiler-errors switch-statement visual-studio
为了以后的读者和我自己的理智,我希望绝对清楚地表明switch,没有default案件的陈述(由于所有案件都被覆盖)或if-elseif-else与最终不应该做任何事情的其他陈述不一致并包括对该效果的评论(参见示例).
但是,每当我default在switch语句中包含case 并将其保留为空时我必须在defaultcase中放置一个分号或编译错误:"Line [switch of switch of switch statement]`missing';' 在'}'之前发生.为什么?!
示例:生成编译器错误
switch(direction) {
case MOVE_UP:
//...
break;
case MOVE_RIGHT:
//...
break;
case MOVE_DOWN:
//...
break;
case MOVE_LEFT:
//...
break;
default:
/* DO NOTHING */
}
Run Code Online (Sandbox Code Playgroud)
示例:不会产生编译器错误
switch(direction) {
case MOVE_UP:
//...
break;
case MOVE_RIGHT:
//...
break;
case MOVE_DOWN:
//...
break;
case MOVE_LEFT:
//...
break;
default:
/* DO NOTHING */;
}
Run Code Online (Sandbox Code Playgroud)
C++ 03中的6.1/1给出了带标签语句的语法:
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
C++ 11是相同的,除了你可以在标签之前有属性.
零长度的标记序列不是C++中的语句,因此default:它本身不是标记语句.
也就是说,我不知道为什么标签声明的语法不允许的动机是什么.如果它确实存在,那么如果你写的话会出现语法上的歧义,无论是声明属于,还是没有自己的陈述,但紧接着是一个.毫无疑问它意味着什么,但也许人们认为它会搞砸人们的解析器.default: statementoptdefault : case 1: break;case 1: break;default:default:
| 归档时间: |
|
| 查看次数: |
2525 次 |
| 最近记录: |