C99 标准规定字符串文字字符的实现限制为 4095(?)。但是字面意义上的结束和开始到底在哪里?
printf(
"First part"
"second part!\r\n"
);
这会是单个字符串文字吗?或者这是 2 个字符串文字?
C99 标准规定字符串文字字符的实现限制为 4095(?)。但是字面意义上的结束和开始到底在哪里?
printf(
"First part"
"second part!\r\n"
);
这会是单个字符串文字吗?或者这是 2 个字符串文字?
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 标准几乎相同。官方标准不是免费提供的.)