为了未来读者的利益和我自己的理智,我想明确表示switch
声明没有default
案件(由于所有案件都被覆盖)或顺序if-elseif-else
与最后的其他不应该做任何事情必须不得省略,并包含对该效果的评论(参见示例)。
但是,每当我在default
语句中包含switch
案例并将其保留为空时,我必须在default
案例中放置一个分号或编译器错误:“行[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 ++中的语句,因此default:
本身不是标记语句。
也就是说,我不知道为什么标签声明的语法不允许default: statementopt
的动机是什么。如果它确实存在,那么如果你写default : case 1: break;
,case 1: break;
是属于default:
的声明,或者default:
是否没有自己的声明,而是紧接着是一个声明歧义。毫无疑问它意味着什么,但也许它被认为会弄乱人们的解析器。
因为你需要一个声明你的default
案件。分号是空语句。