接受所有编译器的所需的最大长度是多少?它在C ++ 11中有变化吗?如果是这样,旧的价值是什么?
我问的是这个问题,因为我正在做一些繁重的预处理器voodoo(不幸的是,模板不会削减它),并且这样做有一种趋势,使得线条很快变大。我想保持安全,所以我不必担心平台Y上的编译器X因为行太长而拒绝我的代码的可能性。
答案 0 :(得分:31)
C ++ 2003,附件B,(资料性的) 实施数量(抱歉,没有C ++ 2011方便)
2)限制可能会限制包含下述数量或其他数量的数量。括号内的数字 建议将每个数量作为该数量的最小值。但是,这些数量是 仅指导方针,不确定合规性。
...
- 一个逻辑源行中的字符[65 536]。
你没有问过这些问题,但它们也可能有用:
- 在完整表达式[256]中嵌套带括号的表达式的级别。
- 在一个翻译单元中同时定义宏标识符[65 536]。
- 一次宏调用中的参数[256]。
- 内部标识符或宏名称中的字符数[1 024]。
- 在一个翻译单元中同时定义宏标识符[65 536]。
- 一个宏定义[256]中的参数。
<小时/> Postscript :值得注意的是“一条逻辑源线”是什么。 逻辑源代码行是之后的:
- 物理源文件字符映射到基本源 字符集
- 三字符 序列(2.3)被相应的单字符内部表示替换
- 删除换行符中的每个实例和前一个反斜杠字符
逻辑源代码行是之前:
- 源文件被分解为预处理标记
- 执行预处理指令并扩展宏调用。
[引自 C ++ 2003,2.1 翻译阶段 ]
因此,如果OP关注的是宏扩展到超出合理的行长度,我的答案是无关紧要的。如果OP担心的是他的源代码(在处理\
,\n
之后)可能太长了,我的答案就是。