Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们为什么使用';:';而不是'';案例控制指令?_C#_C_Switch Statement_Case Statement - Fatal编程技术网

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

C# 我们为什么使用';:';而不是'';案例控制指令?,c#,c,switch-statement,case-statement,C#,C,Switch Statement,Case Statement,我需要知道为什么我们在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

我需要知道为什么我们在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章

案例
默认
标签只能出现在开关语句中

因此,
案例
是一个带标签的语句

标签语句的规定格式如下所示:


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

为什么
大小写
行不应以分号结尾

在基于C的语言中,分号有一个特定的函数作为“语句终止符”。这意味着分号表示特定代码语句的结束,以及另一个代码语句的开始。有关此项的更多信息,请参阅

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

do case 1;
do this;
do case 2;
do this;
编译器将这些代码视为单独的“正常”代码行。然后它可能无法编译,因为
case
关键字被专门保留,仅用于
switch
语句中


至于为什么选择
字符是为了这个特殊目的:正如Luca_65所提到的,这个案例隐藏了一个
goto
标签语句。冒号在C to中使用,这种语法一直沿用到它的派生语言


正如博比·斯皮尔斯所说,这个字符最初可能是由于冒号在英语语法中的相似含义而被选择的。

因为
case
s是标签,这是标签的语法。为什么
中的case-in
开关
为什么不在
if
else
条件中呢?因为这不是一条指令。早期的代码是用古腾堡风格排版的印刷机。程序员的
不断用完符号,所以他们决定切换到
来处理case语句,这样他们就可以编写更长的程序了。@BJMyers不确定。我听说这只是里奇在记录语言时的一个打字错误。
do case 1;
do this;
do case 2;
do this;