为什么这样做
printf("Hello"
"World");
尽管
printf("Hello
""World");
没有? ANSI C连接相邻的字符串,没关系......但这是另一回事。 这与C语言解析器有什么关系吗? 感谢
答案 0 :(得分:7)
字符串必须在行尾之前终止。这是一件好事。否则,忘记的close-quote可能会阻止后续的代码行执行。
这可能需要花费大量时间进行调试。这些天语法着色将提供线索,但在早期有单色显示。
答案 1 :(得分:1)
您无法在字符串文字中创建新行。这是一个选择,我的C. IMO的设计师,这是一个很好的功能。 但是你可以这样做:
printf("Hello\
""World");
给出相同的结果。
答案 2 :(得分:1)
C语言是根据标记定义的,其中一个标记是字符串文字(在标准中: s-char-sequence )。 s-char-sequences以未转义的双引号开头和结尾,不得包含未转义的换行符。
相关标准(C99)引用:
> Syntax
> string-literal:
> " s-char-sequence(opt) "
> L" s-char-sequence(opt) "
> s-char-sequence:
> s-char
> s-char-sequence s-char
> s-char:
> any member of the source character set
> except the double-quote ", backslash \,
> or new-line character
> escape-sequence
然而,在称为行拼接的早期转换阶段中删除了转义的换行符,因此编译器永远不会解释它们。这是相关标准(C99)的引用:
翻译语法规则的优先级由以下阶段指定。