这是出于好奇.单个交换机中可以拥有的最大交换机数量是多少,包括默认值:case.我的意思是这样的:
switch(ch) { case 1: //some statement break; case 2: //some statement break; . . . . case n: //some statement break; default: //default statement }
我的问题是我们可以在这里获得的最大价值是多少?虽然这不是编程上重要的,但我发现这是一个相当有趣的想法.我搜索了一些博客并在此发现了一个声明.
从我的文件,据说:
标准C指定交换机可以包含至少257个case语句.标准C++建议至少支持16,384个案例语句!真正的价值必须取决于实施.
但我不知道这些信息有多准确,有人可以给我一个想法吗?此外,依赖于实现意味着什么?假设存在这样的限制,我可以以某种方式将其更改为更高或更低的值吗?
该草案C++标准 Annex B (informative) Implementation quantities
说(重点煤矿):
由于计算机是有限的,因此C++实现不可避免地受限于它们可以成功处理的程序的大小.每个实施都应记录已知的限制.[...]
限制可能会限制包括下面描述的数量或其他数量的数量.建议将每个数量后面的括号内的数字作为该数量的最小值.但是,这些数量仅是指导原则,不能确定合规性.
并包括以下项目:
- switch语句的case标签(不包括任何嵌套switch语句的标签)[16384].
但这些并不是硬限制,只是对最小值的建议.
实现是编译器,标准库和支持工具,因此实现依赖基本上意味着在这种情况下编译器将决定限制是什么,但它应该记录此限制.该标准草案定义了实现定义的行为在部分1.3.10
如下:
行为,对于格式良好的程序构造和正确的数据,这取决于实现和每个实现文档
我们可以看到,gcc
不加以限制的Ç:
GCC仅受可用内存的限制.
在这种情况下,它也应该涵盖C++,看起来Visual Studio也没有限制:
Microsoft C不限制switch语句中的case值的数量.该数量仅受可用内存的限制.ANSI C要求在switch语句中允许至少257个case标签.
我找不到类似的文档clang
.