源行长度限制

时间:2012-05-09 15:59:45

标签: c++ c++11 standards

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

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

1 个答案:

答案 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之后)可能太长了,我的答案就是。