这是出于好奇。单个开关盒最多可以有多少个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(使用前将#替换为@)