C语句的最大语句长度

Tho*_*ber 5 c gcc

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

编译器是gcc

eca*_*mur 10

该标准规定了最低翻译限制:

5.2.4.1翻译限制

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

[...]

- 逻辑源行中的4095个字符

然而,该标准建议" 实施应尽可能避免强加固定的翻译限制 ".

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

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

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

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

忽略文字,我们也看到:

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

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

  • "字符串文字可能只出现在语句中" - 这不是真的,例如`const char*foo ="hello,world";`是一个声明,而不是一个声明.但它并不重要,因为从中得出的语句长度的下限无论如何都是名义上的. (2认同)

Jon*_*ler 6

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

§5.2.4.1翻译限制

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

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

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

19)参见''未来语言方向''(6.11.3).

§6.11.3外部名称

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

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

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

  • /我去写一个达到这些限制的程序. (3认同)