【问题标题】:Why we are using ' : ' instead of ' ; ' in case control instruction? [closed]为什么我们使用 ' : ' 而不是 ' ; ' 万一控制指令? [关闭]
【发布时间】:2017-06-03 04:53:31
【问题描述】:

我想知道为什么我们在 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;

请帮帮我

【问题讨论】:

  • 因为cases 是标签,这就是标签的语法。
  • 为什么switch 中的大小写为什么不在ifelse 条件下?
  • 因为这不是指令。
  • 早期代码是使用古腾堡式印刷机排版的。程序员不断用完; 符号,因此他们决定切换到: 的case 语句,这样他们就可以编写更长的程序。
  • @BJMyers 不确定。我听说这只是里奇在记录语言时的一个错字。

标签: c# c switch-statement case-statement


【解决方案1】:

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

在基于 C 的语言中,分号具有作为“语句终止符”的特定功能。这意味着分号标志着特定代码语句的结束,以及另一个代码语句的开始。有关这方面的更多信息,请参阅this quora post

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

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

编译器将这些视为单独的“正常”代码行。然后它可能会编译失败,因为case 关键字专门保留用于switch 语句中。


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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        引用C11,第 6.8.1 章

        casedefault 标签只能出现在 switch 语句中。

        所以,case 是一个标签语句

        标记语句的规定格式由下式给出

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

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

        【讨论】:

          猜你喜欢
          • 2014-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-13
          • 2020-07-11
          • 2014-09-19
          • 2021-01-05
          相关资源
          最近更新 更多