当前位置: 首页 > 知识库问答 >
问题:

开关箱中的值无效,没有默认标签

滕鸿畴
2023-03-14

我非常喜欢跳过枚举开关中的“default:”标签。因此,当枚举有一个新值,而该值不是由开关大小写处理时,我会收到编译器警告。

现在一位同事说,当将一个整数传递给这个枚举未涵盖的开关案例时,我会得到一个分段错误。

至少我们正在使用的gcc能够正确地处理它。Visual Studio文档还指出:如果“没有任何常量与案例标签中的常量匹配,并且默认标签不存在

这是所有(或至少是大多数)编译器的标准和行为吗?

共有3个答案

郗鹏
2023-03-14

[标准开关]状态:

如果没有大小写匹配并且没有默认值,则不执行开关中的任何语句。

所以是的,VS在这方面遵循标准。

张炳
2023-03-14

只有当跳过的大小写破坏了您的代码时,它才会导致分段错误。否则,任何编译器都不应发出会产生分段错误的代码。

将产生故障的示例:

 switch(flag) {
     case Type1: p = malloc(200); break;
     case Type2: p = malloc(100); break;
 }
 memcpy(p, source, 10);
陈正业
2023-03-14

MS编译器似乎做得很好。以下是标准的内容(6.4.2/5):

如果没有与条件匹配的case常量,并且存在默认标签,则控制传递到由默认标签标记的语句。如果没有大小写匹配,并且没有默认值,则不会执行开关中的任何语句。

 类似资料:
  • 问题内容: 我遇到了一个无法解决的SQL愚蠢问题。 错误: 有人可以帮我吗? 问题答案: 仅在字段上可接受。字段必须保留为空的默认值,或者根本不保留任何默认值- 默认值必须为常量值,而不是表达式的结果。 相关文档:http : //dev.mysql.com/doc/refman/5.0/en/data-type- defaults.html 您可以通过在表上设置插入后触发器以在任何新记录上填充“

  • 我正在学习一个在线课程,包括创建一个Wordpress插件。当我尝试按照说明(并使用提供的代码排除我这边的任何错误)创建自定义表时,出现了一个问题。这是原始代码的一部分: MySQL(意大利语)的本地设置可能会产生任何问题吗?MySQL版本为::5.7.21-0Ubuntu0.16.04.1-(Ubuntu)。PHP版本7.0.22。Wordpress版本:4.9.2。谢谢你。

  • 这是我的用户。JAVA 这是我的地址。JAVA 但是当我试图持久化对象时,我得到了这个异常 错误不会来,如果我删除"NOTNULL"约束从FORIGN_KEY"USER_ID",但我需要使它作为一个NOTNULL列我应该怎么做。 这是我的注册方法 这是我的SQL脚本

  • 我不明白为什么我应用程序会删除异常“字段'ID_Employeer'没有默认值”。 是我的主键,当我试图将任何信息保存到我的数据库时,我得到了这个异常,但是,当我只是试图从DB读取信息时,它是正常的。 我读了关于StackOverflow的主题,但我仍然不明白我应用程序中的答案。我正在使用Hibernate5.2.11。 我的: 我的冬眠: 下一个CharacterInfo类 主类 最后例外

  • 以下是PyMongo连接的简单测试片段: 以下是输出: ......998 999 以下是MongoDB控制台中的输出: 2018-03-24T20:00:55.746 0530 I网络[listener]连接已从127.0.0.1:51272#1500(现在有1000个连接打开)接受2018-03-24T20:00:55.747 0530 I网络[conn1500]从127.0.0.1:5127

  • 我正在尝试序列化一个avro模式,然后将其写入hortonworks模式注册表,但在写入操作期间收到以下错误消息。 这是avro模式 无论谁,如果我添加“null”作为联合的第一种类型,都会成功。avro联合类型需要“null”吗?在我的情况下,这将是不正确的数据表示,所以我不热衷于这样做。如果有什么不同,我使用avro 1.9.1。 此外,如果标签不正确,但找不到标签并且没有足够的代表来创建新标