C / C ++控制结构限制?

时间:2010-01-22 17:40:22

标签: c++ c language-implementation

我听说VC ++中的限制(不确定哪个版本)嵌套if语句的数量(在300的大概中)。代码格式如下:

if (a) ...
else if (b) ...
else if (c) ...
...

我很惊讶地发现 限制了这种事情,而且限制是如此之小。我不是在寻找关于编码实践的评论以及为什么要完全避免这种事情。

以下是我想象可能有一些限制的事项列表:

  • 范围(全局,类或命名空间)中的函数数。
  • 单个语句中的表达式数量(例如,复合条件)。
  • 交换机中的案例数。
  • 函数的参数数量。
  • 单个层次结构中的类数(继承或包含)。

其他哪些控制结构/语言功能有这样的限制?语言标准是否说明了这些限制(可能是实现的最低要求)?是否有人使用特定的编译器/实现遇到特定的语言限制?

编辑:请注意,if语句的上述形式确实是“嵌套的”。它相当于:

if (a) { //...
}
else {
    if (b) { //...
    }
    else {
        if (c) { //...
        }
        else { //...
        }
    }
}

4 个答案:

答案 0 :(得分:11)

Visual C++ Compiler Limits

  

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. 

这当然是正确的,但在这种情况下可能没有帮助。

相关问题