所有编译器都必须接受的源代码行的最大长度是多少?它在 C++11 中改变了吗?如果是这样,旧值是多少?
我问这个问题是因为我正在做一些繁重的预处理器巫术(不幸的是,模板不会削减它),这样做会使线条很快变大。我想保持安全,所以我不必担心平台 Y 上的编译器 X 可能会因为行太长而拒绝我的代码。
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
)可能太长,我的回答是成立的。