1

C99 标准规定字符串文字字符的实现限制为 4095(?)。但是字面意义上的结束和开始到底在哪里?

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

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

4

1 回答 1

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 标准几乎相同。官方标准不是免费提供的.)

于 2013-10-27T23:31:08.600 回答