源行长度限制

23 c++ standards c++11

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

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

Rob*_*obᵩ 31

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

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

...

  • 一个逻辑源行中的字符[65 536].

你没有问过这些问题,但它们也可能有用:

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


后记:值得注意的是"一条逻辑源线"是什么.一个合乎逻辑的源代码行是你有:

  • 物理源文件字符映射到基本源字符集
  • Trigraph序列(2.3)由相应的单字符内部表示代替
  • 将删除换行符后面的每个实例和前一个反斜杠字符

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

  • 源文件被分解为预处理令牌
  • 执行预处理指令并扩展宏调用.

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

因此,如果OP关注的是宏扩展到超出合理的行长度,我的答案是无关紧要的.如果OP关心的是他的源代码(处理后\,\n)可能太长,我的回答代表.

  • 要确认一下,这在C++ 11中是一样的. (8认同)
  • +1:这是C++ 11中的samne:" - 一个逻辑源行中的字符[65 536]." 附件B.2 (4认同)