使用 switch 语句可以解决的最大情况数

2024-01-27

这是出于好奇。单个开关盒最多可以有多少个switch包括default: 案件。我的意思是这样的:

switch(ch)
{
case 1:
//some statement
break;
case 2: 
//some statement
break;
.
.
.
.
case n:
//some statement
break;
default:
//default statement
}

我的问题是我们在这里可以获得的最大价值是多少?尽管这在程序上并不重要,但我发现这是一个相当有趣的想法。我查了一些博客,发现了这样的说法here http://www.cplusplus.com/forum/general/27965/.

从我的一份文档来看,据说:

标准 C 规定一个开关至少可以有 257 个 case 声明。标准 C++ 建议至少 16,384 个案例 言论予以支持!真正的价值必须在于执行 依赖。

但我不知道这个信息有多准确,有人可以给我一个想法吗?还有这是什么意思依赖于实现?假设存在这样的限制,我可以以某种方式将其更改为更高或更低的值吗?


The C++ 标准草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3485.pdf%22 Annex B (informative) Implementation quantities says (强调我的):

由于计算机是有限的,C++ 实现不可避免地会受到它们能够成功处理的程序大小的限制。每个实施都应记录已知的限制. [...]

这些限制可能会限制包括以下描述的数量或其他数量。建议每个数量后面的括号内的数字作为该数量的最小值。然而,这些数量仅供参考,并不决定合规性.

并包括以下项目:

— switch 语句的 case 标签(不包括任何嵌套 switch 语句的标签)[16384]。

但这些并不是硬性限制,只是最低限度的建议。

实现是编译器、标准库和配套工具等依赖于实现基本上意味着对于这种情况,编译器将决定限制是什么,但它应该记录此限制。标准草案定义实现定义的行为在部分1.3.10 as:

行为,对于格式良好的程序构造和正确的数据,这取决于实现并且每个实现都记录了

我们可以看到gcc 不施加限制 http://gcc.gnu.org/onlinedocs/gcc/Statements-implementation.html#Statements-implementation for C:

GCC 仅受可用内存的限制。

这也应该涵盖C++在这种情况下,它看起来像视觉工作室 http://msdn.microsoft.com/en-us/library/k0t5wee3%28v=vs.120%29.aspx也没有设置限制:

Microsoft C 不限制 switch 语句中 case 值的数量。该数量仅受可用内存的限制。 ANSI C 要求 switch 语句中至少允许有 257 个 case 标签。

我找不到类似的文档clang.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 switch 语句可以解决的最大情况数 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐