C中您可以拥有的最大变量/标识符数量是多少?学习编译器理论和解释器设计,我了解到标识符及其值通过符号字典/散列图存储。
考虑到hashmaps / dictionaries有一个RAM限制,C编程语言中最大可能的散列标识符是多少?
答案 0 :(得分:10)
通常,标识符的数量是实施质量问题。我所知道的所有编译器仅受可用资源(内存)的限制。
然而,C标准,C11中有一个(几乎无用的)最低限制规范,由我强调标识符:
5.2.4.1翻译限制
实施应能够翻译和执行至少一个 包含至少一个实例的程序 以下限制:
- 127个嵌套级别的块
- 63条件包含的嵌套级别
- 修改算术,结构,联合或void类型的12个指针,数组和函数声明符(以任意组合) 声明
- 完整声明符中的括号声明符的嵌套级别
- 完整表达式中括号内表达式的嵌套级别
- 内部标识符或宏名称中的63个重要初始字符(每个通用字符名称或扩展源字符 被视为单个字符)
- 外部标识符中的31个重要的初始字符(每个通用字符名称指定短标识符0000FFFF或 less被认为是6个字符,每个通用字符名称 指定00010000或更高的短标识符被认为是10 字符和每个扩展源字符被认为是相同的 字符数作为相应的通用字符名称,如果 任何)
- 一个翻译单元中的4095个外部标识符
- 在一个块中声明了块范围的511个标识符
- 在一个预处理翻译单元中同时定义的4095个宏标识符
- 一个函数定义中的127个参数
- 一个函数调用中的127个参数
- 一个宏定义中的127个参数
- 一次宏调用中的127个参数
- 逻辑源行中的4095个字符
- 字符串文字中的4095个字符(连接后)
- 对象中的65535个字节(仅限托管环境中)
- #included files的15个嵌套级别
- 开关语句的1023个案例标签(不包括任何嵌套的switch语句的案例标签)
- 单一结构或工会中的1023名成员
- 单个枚举中的1023枚举常量
- 单个struct-declaration-list中的63个嵌套结构或联合定义
由于“至少有一个程序”部分,我认为它几乎无用。我认为意图很明确,但如果你的供应商向你出售一个编译器,只能翻译一个测试这些限制的程序,那么你将无法收回你的钱: - )
答案 1 :(得分:4)
标准没有指定限制,因此可以选择编译器或解释器。
您还应该注意,标识符可以在最终的二进制文件中编译出来。
答案 2 :(得分:2)
C标准中似乎没有任何信息,但C ++标准确实提到了一些您可能用作指南的最低建议:
附件B(资料性附录) 实施数量 [implimits] 强>
(2.8) - 具有块范围的标识符在一个块[1 024]中声明。