在C中,您可以拥有的最大标识符数量是多少?

Ner*_*gal 0 c compiler-construction interpreter identifier limit

你可以在C中拥有的最大变量/标识符数量是多少?学习编译器理论和解释器设计,我了解到标识符及其值通过符号字典/散列映射存储.

考虑到hashmaps/dictionaries有一个RAM限制,C编程语言中可能的最大散列标识符数量是多少?

Jen*_*ens 10

通常,标识符的数量是实施质量问题.我所知道的所有编译器仅受可用资源(内存)的限制.

但是,在C标准C11中,有一个(几乎无用的)最小限制规范,我强调标识符:

5.2.4.1翻译限制

该实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:

  • 127个嵌套级别的块
  • 63个嵌套级别的条件包含
  • 12个指针,数组和函数声明符(以任意组合)修改声明中的算术,结构,联合或void类型
  • 完整声明符中63个带括号的声明符的嵌套级别
  • 63个完整表达式中带括号的表达式的嵌套级别
  • 内部标识符或宏名称中的63个重要初始字符(每个通用字符名称或扩展源字符被视为单个字符)
  • 外部标识符中的31个重要的初始字符(指定短标识符0000FFFF或更少的每个通用字符名称被认为是6个字符,指定短标识符00010000或更多的每个通用字符名称被认为是10个字符,并且每个扩展源字符被认为是与相应的通用字符名称相同的字符数(如果有)
  • 一个翻译单元中有4095个外部标识符
  • 在一个块中声明具有块作用域的511个标识符
  • 在一个预处理转换单元中同时定义的4095个宏标识符
  • 一个函数定义中的127个参数
  • 一个函数调用中有127个参数
  • 一个宏定义中的127个参数
  • 一次宏调用中的127个参数
  • 逻辑源行中的4095个字符
  • 字符串文字中的4095个字符(连接后)
  • 对象中的65535个字节(仅限托管环境中)
  • #included文件的15个嵌套级别
  • switch语句的1023个case标签(不包括任何嵌套switch语句的标签)
  • 单一结构或工会中的1023名成员
  • 单个枚举中的1023枚举常量
  • 单个struct-declaration-list中的63级嵌套结构或联合定义

由于"至少有一个程序"部分,我认为它几乎无用.我认为意图很明确,但如果你的供应商向你出售一个编译器,只能翻译一个测试这些限制的程序,那么你就不会得到你的钱了:-)