符号":" C 和 C++ 中是什么意思?
What does the symbol ":" mean in C and C++?
那么为什么开关大小写使用冒号":"?难道不能这样写
——switch(foo) {
case 1 {
do_stuff();
}
case 2 {
do_other_stuff();
}
case default {
do_default_stuff();
}
}
那么,为什么":"与开关和外壳一起使用呢?
更一般地说,符号":"在C和C++中是什么意思?
我发现的唯一信息是它与goto
有关,我认为在 c 和 cpp 中不再使用太多。
冒号通常用于 C 和 C++ 语法中来表示标签:执行可以跳转到的位置,该位置不是由显式块确定的。
这就是我的意思。在if
语句中,执行将跳过第一个块或else
块。在这两种情况下,整个块都会被跳转。在while
循环中,执行跳转到块开始之前,或者使用条件的break
语句/失败跳转到块外。
基本上,大多数在 C 和 C++ 中跳来跳去都是基于块和关键字
的。无论块定义如何,goto
都可以跳转到函数中的任何任意标签(C++有话要说,你可以"任意"跳来跳去。虽然switch
语句只能跳转到其自身块内的不同case/default
位置,并且只能跳转到一个这样的位置,但这些位置不会创建范围块(就像我们有时希望的那样(。这些位置不定义独占代码的部分;执行直接通过标签传递(这就是为什么break
语句通常与case/default
一起使用的原因(。
简而言之,case/default
的行为比正常的C或C++块结构更像标记的goto
。因此,他们使用相同的语法来表示它们:冒号。
在您阅读时,它用于指定要跳转到的 goto 语句的目标/标签。 例如:
printf("x1n");
goto target;
printf("x2n");
target:
printf("x3n);
会打印出来:
x1
x3
它还用于指定开关/机箱块中的跳转目标:
switch(someVal)
{
case 1:
printf("1n");
break;
case 2:
printf("2n");
break;
default:
printf("Something elsen");
break;
}
至于为什么使用它(而不是其他一些字符或语法(,最可能的解释是语法是从 B 语言继承而来的,这是 C 语言的来源。 您可以在此PDF中看到B程序中goto和switch/case用法的示例,它们看起来非常像C语法。
开关大小写结构中的 : 通常标记大小写标签的结尾。也就是说,当一个案例被定义为案例 1 时:这意味着 : 表示案例内案例构造的标签的结束,任何语句或方法都可以执行。
例如:
switch(ch)
{
case 1:// Completion of case 1 label
printf("Hello");
break;
case 2:// Completion of case 2 label
printf("World");
break;
}
>:
是语法中称为labeled-语句的项的一部分。存在三种不同的情况,C17 6.8.1:
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
第一种情况identifier : statement
是指 goto 标签,另外两种情况是指switch
语句。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思