c 程序中的表达式对于 gcc 编译是否会太长?

2024-02-14

假设我在一行 c 代码(.c 或 .h 文件)上输入一个非常长的方程,该方程有数千(也许数万)个字符长;例如

y = (2*(36*pow(x,2)*pow(A[n][j],5)*B[n][j]
  + (several thousand more such expressions) ) ;

(这里只取 x 为变量,A、B 为双指针等)。在说 gcc 编译器无法正确编译代码之前,.c 或 .h 文件中一行代码的长度是否有限制?我已经阅读了一些关于 #c 问题的相关讨论,但不仅仅是简单的 c。我从未收到过来自 gcc 的任何关于代码中行数太长的错误,但我想更加确定这一点。

编辑: 为了回应以下一些评论,我现在意识到我在问两个(我认为密切相关的)问题:

(1) 在 gcc 编译器可能出错/引发错误之前,c 中一行的长度是否有任何限制?

(2) 在 gcc 编译器可能出错/引发错误之前,表达式的复杂程度是否有任何限制? (例如,我们可以将很长的一行分成几行,但它们都是同一个表达式的一部分)。


实际上限为“.c 或 .h 文件中的一行代码可以有多长”高度依赖于实现,但标准中指定了下限。根据C11,§5.2.4.1

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

  • 逻辑源代码行中有 4095 个字符

也就是说,作为Keith在其他答案中提到过 https://stackoverflow.com/a/46652084/2173917,逻辑行和语句/表达式的复杂性(涉及操作/操作数的数量、操作类型、嵌套表达式等)不是一回事。还有单独的最低限度建议,例如

  • 完整表达式中带括号表达式的 63 层嵌套

  • 在一个块中声明了 511 个具有块作用域的标识符

etc.

在计算复杂表达式的过程中,必须临时存储多个中间结果,理论上,这可能会耗尽系统中所有可用的堆栈空间,从而产生问题。在实践中,这确实是很牵强的,除非表达式非常复杂以至于无法容纳在当今的多吉位计算系统中。


话虽如此,您可能只需要编写一次这样的代码,即never。正如我和 M. Fowler 所说,

任何傻瓜都可以编写计算机可以理解的代码。好的 程序员编写人类可以理解的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c 程序中的表达式对于 gcc 编译是否会太长? 的相关文章

随机推荐