C语句的最大语句长度

时间:2012-07-23 14:35:16

标签: c gcc

C中定义的语句是否有最大长度?

编译器是gcc

2 个答案:

答案 0 :(得分:9)

标准规定了最低翻译限额:

  

     

5.2.4.1翻译限制

     

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

     

[...]

     

- 逻辑源行中的4095个字符

然而,标准建议“实施应避免在可能的情况下强制实施固定的翻译限制”。

逻辑源行是反斜杠 - 换行符拼接(5.1.1.2:1.2)的结果,因此这不直接涵盖语句中字符数的最小限制。

但是,因为另一个翻译限制要求是:

  

- 字符串文字中的4095个字符(连接后)

并且字符串文字可能只出现在语句中,因此实现必须接受至少一个4095字符的语句。

忽略文字,我们也看到:

  

- 一个函数调用中的127个参数

并且作为一个函数调用必须包含每个参数至少2个字符,加上4个调用(f(0,0,...);),我们得到的最小行长限制为260.

答案 1 :(得分:6)

C标准规定了编译器必须接受的语言复杂性的各种下限,但不限制语句本身的长度。

  

§5.2.4.1翻译限制

     

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

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

18)实施应尽可能避免强加固定的翻译限制。

     

19)参见“未来语言方向”(6.11.3)。

     

§6.11.3外部名称

     

将外部名称的重要性限制为少于255个字符   (将每个通用字符名称或扩展源字符视为单个字符   character)是一个过时的功能,是对现有实现的让步。

如你所见,脚注18会阻止实施这种限制。

说了这么多,我不想看到一个侵犯极限的声明。它最好是机器生成的而不是人为的。