C99标准表示字符串文字字符的实现限制为4095(?)。 但是文字的确切结束并开始了吗?
printf(
"First part"
"second part!\r\n"
);
这是一个单字符串文字吗?或者这是2个字符串文字吗?
答案 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标准相同。官方标准是不是免费提供的。)