23

所有编译器都必须接受的源代码行的最大长度是多少?它在 C++11 中改变了吗?如果是这样,旧值是多少?

我问这个问题是因为我正在做一些繁重的预处理器巫术(不幸的是,模板不会削减它),这样做会使线条很快变大。我想保持安全,所以我不必担心平台 Y 上的编译器 X 可能会因为行太长而拒绝我的代码。

4

1 回答 1

32

C++2003,附件 B,(资料性)实现数量(抱歉,手头没有 C++2011)

2) 限制可能会限制包括以下描述的数量或其他数量。建议将每个数量后面的括号中的数字作为该数量的最小值。但是,这些数量仅作为指导,并不能确定合规性。

…</p>

  • 一个逻辑源代码行中的字符 [65 536]。

您没有询问这些,但它们可能也很有用:

  • 在完整表达式中嵌套括号表达式的级别 [256]。
  • 在一个翻译单元中同时定义宏标识符 [65 536]。
  • 一个宏调用中的参数 [256]。
  • 内部标识符或宏名称 [1 024] 中的字符数。
  • 在一个翻译单元中同时定义宏标识符 [65 536]。
  • 一个宏定义中的参数 [256]。


后记:值得注意的是“一个逻辑源代码行”是什么。逻辑源代码行您所拥有的:

  • 物理源文件字符映射到基本源字符集
  • 三字母序列(2.3)被相应的单字符内部表示代替
  • 删除换行符和紧接在前面的反斜杠字符的每个实例

逻辑源代码行是您之前所拥有的:

  • 源文件被分解成预处理标记
  • 执行预处理指令并扩展宏调用。

[引自C++ 2003, 2.1翻译阶段]

因此,如果 OP 担心宏扩展到超出合理的行长,那么我的回答是无关紧要的。如果 OP 担心他的源代码(在处理\,之后\n)可能太长,我的回答是成立的。

于 2012-05-09T16:03:29.397 回答