string-literal在哪里开始和结束?

时间:2013-10-27 23:05:42

标签: c99 string-literals

C99标准表示字符串文字字符的实现限制为4095(?)。 但是文字的确切结束并开始了吗?

printf(
    "First part"
    "second part!\r\n"
    );

这是一个单字符串文字吗?或者这是2个字符串文字吗?

1 个答案:

答案 0 :(得分:3)

N1256 5.2.4.1说:

  
      
  • 字符串文字或宽字符串文字中的4095个字符(连接后)
  •   

“连接后”是指在转换阶段6(5.1.1.2)中出现的相邻字符串文字的串联。

因此,对于4095个字符的限制,这个:

"First part"
"second part!\r\n"

是单个字符串文字。

请注意,这是最小上限。实现必须允许任何长度最多4095个字符的字符串文字;他们可能允许更长的,并且根本不需要施加任何固定限制。

实际上比这更复杂;该标准要求实现接受符合每个限制的一个翻译单元。但在实践中,您可以依赖任何符合C99编译器来允许4095个字符的文字,除非您的程序遇到其他一些实现限制。

C11的限制相同。在C90中,它是509个字符。

顺便说一下,在printf通话中打印“\ r \ n”的可能性不大。 stdout是一个文本流,这意味着'\n'换行符将转换为操作系统用作行尾指示符的任何内容。

(N1256是C99后的草案,由官方C99标准和三个技术勘误表组成.N1570是C11的最后一个草案,几乎与发布的C11标准相同。官方标准是不是免费提供的。)