为什么我们使用 ':' 而不是 '; '在案例控制指令中?

Why we are using ' : ' instead of ' ; ' in case control instruction?

我想知道为什么我们在 c 编程中对关键字 case 使用冒号而不是分号?

/*valid statement*/
case 1:
   do this;
case 2:
   do this;

/*why is invalid to write */

case 1;
    do this;
case 2;
    do this;

请帮帮我

从英文写作的角度来看,冒号更有意义,这使代码更易于阅读。

把它想象成告诉计算机以下内容:

In case the number is 1, you should do these things: 
    Thing 1;
    Thing 2;
    Thing 3;

C 开关隐藏转到等于被测值的标签。

引用 C11,章节 §6.8.1

A case or default label shall appear only in a switch statement.

所以,case 是一个 标签语句

标签语句的规定格式由

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

关于:选择,这是关于assembly syntax,其中:用于标识指定语句块。

为什么 case 行不应该以分号结尾

在基于 C 的语言中,分号具有与 'statement terminator' 相同的特定功能。这意味着分号标志着一个特定代码语句的结束,以及另一个代码语句的开始。有关这方面的更多信息,请参阅 this quora post

因此,如果在每个 case 行之后都有一个分号,编译器会将它们全部解释为单独的、单独的语句。就像写:

do case 1;
do this;
do case 2;
do this;

编译器将这些视为单独的 'normal' 行代码。然后它可能会编译失败,因为 case 关键字专门保留仅供在 switch 语句中使用。


至于为什么选择 : 字符用于此特定目的:正如 Luca_65 提到的,该案例隐藏了 goto 标签声明。冒号在 C 中被使用到 label a section of code,这种语法一直沿袭到它的派生语言。

正如 Bobby Speirs 指出的那样,最初选择该字符可能是因为冒号在英语语法中的含义相似。