为什么几乎所有语言的字符串都要求您转义引号?
例如,如果你有一个字符串,如
"hello world""
为什么语言要你把它写成
"hello world\""
您是否不仅要求字符串以引号开头和结尾?
您可以将结束报价视为字符串的终止报价。如果没有结束报价则会出现错误。您还可以假设字符串在一行上开始和结束,并且不跨越多行。
答案 0 :(得分:1)
编译器如何知道哪个引号结束了字符串?
更新:
在C& C ++,这是一个非常好的字符串:
printf("Hel" "lo" "," "Wor""ld" "!");
打印Hello, World!
或者' bout是C#
Console.WriteLine("Hello, "+"World!");
现在应该打印Hello, World
还是Hello, "+"World!
?
答案 1 :(得分:1)
否则,编译器会将第二个引号视为字符串的结尾,然后是随后的随机引号,从而导致错误。
"使用" escape"实际上意味着暂时逃避解析文本并进入另一种模式,其中后续角色的处理方式不同。"资料来源:https://softwareengineering.stackexchange.com/questions/112731/what-does-backslash-escape-character-really-escape
答案 2 :(得分:1)
假设我想将", "
放入字符串文字中(因此文字包含引号)。
如果我没有逃脱就这样做,我会写"", ""
。这看起来像是用逗号分隔的两个空字符串文字。例如,如果我想用这个字符串文字调用一个函数,我会写f("", "")
。这看起来像编译器,我传递两个参数,都是空字符串。它怎么知道差异呢?
答案是,它不能。也许在像"hello world""
这样的简单情况下,它至少可以解决一些语言问题。但是,对于不同的语言而言,明确且不需要转义的字符串集将是不同的,并且很难跟踪哪个是哪个,并且对于任何语言,将存在一些需要转义的模糊情况。编译器编写器更容易跳过所有这些边缘情况,并且总是要求您转义引号,对程序员来说可能也更容易。
答案 3 :(得分:0)
您必须转义第二个引号的原因是编译器知道引号是字符串的一部分,而不是终止符。如果你没有逃避它,编译器只会选择hello world
而不是hello world"
答案 4 :(得分:0)
让我们做一个实际的例子。
如何翻译?
"Hello"+"World"
'HelloWorld' or 'Hello"+"World'
vs
"Hello\"+\"World"
通过转义引号字符,可以消除歧义,代码应该对编译器有歧义。所有编译器都应该将相同的代码编译为相同的可执行文件。它基本上是一种告诉编译器的方式“我知道这看起来很奇怪,但我的意思是它应该是这样的”