为什么"defau4t"在 switch 语句中是合法的?
Why is "defau4t" legal in a switch statement?
我在其他网站上想出了这个程序,并想尝试一下,下面是这个程序:
#include <stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
}
return 0;
}
令人惊讶的是,它编译时没有出现错误或警告。这怎么可能?关键字"default"不是有错误吗
有人能解释这种行为吗?
令牌根本不被视为关键字。这是一个名为"defau4t"的goto
跳转标记,指向其他无效代码(在case '2':
的break;
之后)。。。
试试这个(和一个无休止的循环):
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
default: goto defau4t;
}
switch
语句的一个缺陷是,您可以使用goto
在它们之间疯狂地跳来跳去。在switch
内部(或外部)的任何点,都可以放置标签,您可以使用goto
跳转到该标签。当然,这是非常糟糕的做法,因为它会导致意大利面条代码。
所以defau4t:
只是一个标签,标签几乎可以放在函数体内部的任何地方。
除了默认值的拼写错误。
我想你也需要更新
case '1': printf("one");
break;
case '2': printf("two");
break;
至
case 1: printf("one");
break;
case 2: printf("two");
break;
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- c++:定义if语句中的模板
- 为什么"defau4t"在 switch 语句中是合法的?