【发布时间】:2010-01-22 17:40:22
【问题描述】:
我听说 VC++(不确定哪个版本)对嵌套的 if 语句的数量有限制(大约 300 个)。代码格式如下:
if (a) ...
else if (b) ...
else if (c) ...
...
我很惊讶地发现是这种事情的限制,而且限制是如此之小。我不是在寻找有关编码实践以及为什么要完全避免这种事情的 cmets。
以下是我认为可能有一些限制的列表:
- 作用域(全局、类或命名空间)中的函数数。
- 单个语句中的表达式数量(例如复合条件)。
- 开关中的案例数。
- 函数的参数数量。
- 单个层次结构中的类数(继承或包含)。
还有哪些其他控制结构/语言功能有这样的限制?语言标准是否说明了这些限制(可能是实现的最低要求)?有没有人在使用特定的编译器/实现时遇到过这样的特定语言限制?
编辑:请注意,if 语句的上述形式确实是“嵌套的”。相当于:
if (a) { //...
}
else {
if (b) { //...
}
else {
if (c) { //...
}
else { //...
}
}
}
【问题讨论】:
-
代码可能有相同的效果,但不一定相同。
-
嗯,那是你错的地方。编译器非常关心范围。
-
从编译器的角度来看,链接的
if语句不是嵌套的,因为一次只有一个条件激活。一些语言有一个else if结构来使这一点更清楚(就像C 和C++ 预处理器一样)。如果您进入编译器设计,您会发现解析传统的嵌套 if 语句与解析链式else if构造有很大不同。 -
@stringray: Neil 和 David 是正确的,从编译器的角度来看,这两段代码并不等同。
-
Stinray:不,你们的样品不一样。范围不同。
标签: c++ c language-implementation