我听说VC ++中的限制(不确定哪个版本)嵌套if
语句的数量(在300的大概中)。代码格式如下:
if (a) ...
else if (b) ...
else if (c) ...
...
我很惊讶地发现 限制了这种事情,而且限制是如此之小。我不是在寻找关于编码实践的评论以及为什么要完全避免这种事情。
以下是我想象可能有一些限制的事项列表:
其他哪些控制结构/语言功能有这样的限制?语言标准是否说明了这些限制(可能是实现的最低要求)?是否有人使用特定的编译器/实现遇到特定的语言限制?
编辑:请注意,if
语句的上述形式确实是“嵌套的”。它相当于:
if (a) { //...
}
else {
if (b) { //...
}
else {
if (c) { //...
}
else { //...
}
}
}
答案 0 :(得分:11)
C ++标准建议限制 各种语言结构。该 以下是结构列表 Visual C ++编译器没有 实施建议的限制。该 第一个数字是建议的限制 第二个数字是限制 由Visual C ++实现:
嵌套复合语句的级别, 迭代控制结构,和 选择控制结构[256] (256)。
一个宏定义中的参数 [256](127)。
一次宏调用中的参数 [256](127)。
字符串中的字符 字面或宽字符串文字(后 连接)[65536](65535)。
嵌套类,结构或类的级别 联合定义在一个单一的 struct-declaration-list [256](16)。
构造函数中的成员初始值设定项 定义[6144](约600, 依赖于内存,可以增加 / Zm编译器选项)。
一个标识符的范围限定 [256](127)。
嵌套外部规格[1024] (10)。
模板中的模板参数 声明[1024](64)。
答案 1 :(得分:6)
语言标准是否有所说明 关于这些限制(也许是最低限度 实施要求)?
不,标准没有对此设置最低限制。但是,对于实现来说,设置和记录对这些事情的硬限制是一种好的做法,而不是在超出限制时以某种未知的方式失败。
修改:标准建议一些最低限度在附件B中 - 这里发布的内容太多了,无论如何都是建议性的:
限制可能会限制数量 包括下面描述的那些或 其他。括号内的数字如下 建议将每个数量作为 该数量的最小值。然而, 这些数量只是指导原则 并且不确定合规性。
答案 2 :(得分:3)
C指定实现必须能够转换包含许多限制中每个实例的程序。第一个限制是127个嵌套级别的块。 (ISO / IEC 9899:1999的5.2.4.1)
C并未说明任何包含不超过127个嵌套级别的有效程序必须翻译;在其他方面它可能是不合理的大。理由是设置便携式程序可以具有的某种程度的期望,同时允许自由度不排除针对小型系统的小型实现和实现。
简而言之,如果你想要超过127个嵌套级别,这可能意味着你应该查阅你的实现文档,看看它是否能保证支持更大的数字。
答案 3 :(得分:3)
只是将整个范围内容放到床上,以下是合法的C ++代码:
int main() {
if ( int x = 1 ) {
}
else if ( int x = 2 ) {
}
}
如果if和else if都在同一范围内则不会。我认为可能存在许多误解,可能是由我的评论引起的:
The compiler cares a great deal about scope.
这当然是正确的,但在这种情况下可能没有帮助。