开关盒中的“:”是什么?

时间:2018-08-13 04:29:05

标签: c++ c switch-statement

符号:在C和C ++中是什么意思? 为什么与开关盒一起使用? 我已经在网上搜索过,唯一得到的答案是,它是一个标签,并与goto语句一起使用。

4 个答案:

答案 0 :(得分:7)

在C和C ++语法中通常使用冒号来表示标签:执行可以跳转到的位置不是由显式块确定的。

这就是我的意思。在if语句中,执行将跳过第一个块或else块。在这两种情况下,整个块都将跳转。在while循环中,执行跳转到块的开始之前,或者带有break语句/条件失败,跳转到块的外部。

基本上,在C和C ++中,大多数跳转都是基于块和关键字。

goto可以跳转到函数内的任意标签(C ++可以说如何“任意地”跳转),而与块定义无关。尽管switch语句只能跳到其自己块中的不同case/default位置,并且只能跳到一个这样的位置,但这些位置不会创建范围的 block (因为就像我们有时希望他们这么做的那样)。这些位置未定义专有代码的各个部分;执行直接通过标签(这就是break语句通常与case/default一起使用的原因)。

简而言之,与普通的C或C ++块结构相比,case/default的行为更像标记为goto。因此,它们使用相同的语法来表示它们:冒号。

答案 1 :(得分:3)

如您所读,它用于为goto语句跳转到的目标/标签。例如:

 printf("x1\n");
 goto target;
 printf("x2\n");
 target:
 printf("x3\n);

将打印出

 x1
 x3

它也用于在switch / case块中指定跳转目标:

 switch(someVal)
 {
    case 1:
       printf("1\n");
    break;

    case 2:
       printf("2\n");
    break;

    default:
       printf("Something else\n");
    break;
 }

关于为什么的使用(与某些其他字符或语法相反),最可能的解释是该语法是从B language继承的,而this PDF是C源自。您可以在{{3}}中的B程序中看到goto和switch / case用法的示例,它们看起来很像C语法。

答案 2 :(得分:3)

:开关case构造中的:通常标记case标签的结尾。就是说,当案例定义为案例1时:这意味着:表示案例内任何案例或方法都可以执行的案例构造标签的结尾。

例如:

switch(ch)
{
     case 1:// Completion of case 1 label
           printf("Hello");
           break;
     case 2:// Completion of case 2 label
           printf("World");
           break;
}

答案 3 :(得分:1)

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_content"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="610.3dp"> <TextView android:text="Location Detail" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView9" android:layout_marginTop="0dp" android:gravity="center" /> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="199.3dp" android:id="@+id/linearLayout1" android:layout_marginTop="0dp" android:layout_marginRight="20dp" android:layout_marginLeft="20dp"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="40dp" android:id="@+id/linearLayout2"> <TextView android:text="Name" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="match_parent" android:width="100dp" android:gravity="left|center|top" /> <TextView android:text=":" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="40dp" android:gravity="top" /> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/editTextLocationDetailName" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="40dp" android:id="@+id/linearLayout3" android:layout_marginTop="5dp"> <TextView android:text="Address" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textView4" android:width="100dp" android:gravity="center|left|top" /> <TextView android:text=":" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textView5" android:gravity="center|top" /> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/editTextLocationDetailAddress" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp" android:id="@+id/linearLayout4" android:layout_marginTop="5dp" android:gravity="top"> <TextView android:text="Description" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textView6" android:width="100dp" android:gravity="left|center|top" /> <TextView android:text=":" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textView7" android:gravity="center|top" /> <EditText android:inputType="textMultiLine" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/editTextLocationDetailDescription" /> </LinearLayout> </LinearLayout> <TextView android:text="Registered User" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView8" android:layout_marginTop="10dp" android:gravity="center" /> <android.support.v7.widget.RecyclerView android:minWidth="25px" android:minHeight="25px" android:layout_width="match_parent" android:layout_height="fill_parent" android:id="@+id/recyclerViewLocationUser" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="20dp" /> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/progressBarLocationDetail" android:layout_marginTop="20dp" /> <LinearLayout android:orientation="horizontal" android:minWidth="25px" android:minHeight="50dp" android:layout_width="match_parent" android:layout_height="45dp" android:background="#ff03a9f4" android:layout_gravity="right" android:gravity="center" /> </LinearLayout> </LinearLayout> </RelativeLayout> 是语法中称为 labeled-statement 的项的一部分。存在三种不同的情况,C17 6.8.1:

:

第一种情况labeled-statement: identifier : statement case constant-expression : statement default : statement 涉及goto标签,另外两种情况涉及identifier : statement语句。