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

3 c c++ language-implementation

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

if (a) ...
else if (b) ...
else if (c) ...
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

编辑:请注意,上述形式的if陈述确实是"嵌套的".它相当于:

if (a) { //...
}
else {
    if (b) { //...
    }
    else {
        if (c) { //...
        }
        else { //...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*nić 11

Visual C++编译器限制

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).


小智 6

语言标准是否说明了这些限制(可能是实现的最低要求)?

不,标准没有对此设置最低限制.但是,对于实现来说,设置和记录对这些事情的硬限制是一种好的做法,而不是在超过限制时以某种未知的方式失败.

编辑:标准建议一些最低限度在附录B中 - 这里发布的确太多了,无论如何都是建议:

限制可能会限制包括下面描述的数量或其他数量的数量.建议将每个数量后面的括号内的数字作为该数量的最小值.但是,这些数量仅是指导原则,不能确定合规性.

  • 如果我记得的话,标识符有一些最小长度.哦,好吧,我会看看,但我不记得别的了. (2认同)
  • 我可以告诉你,你从未编写过编译器. (2认同)
  • @STingRaySC:有一次关于comp.lang.c.moderated,有一个相当长的讨论,关于编译程序需要多么努力*尝试*编译程序以符合.到目前为止,几乎有一个完全的共识,从技术上讲,一个从未做过任何事情但打印"超出编译器限制"的程序可能被认为是符合要求的实现(使用适当的文档). (2认同)