什么反斜杠"\"真的意味着什么?

pep*_*ero 5 compiler-construction

我想知道Java的反斜杠.计算机或编译器如何看到这个反斜杠以及它是如何存储在计算机中的?

我读到反斜杠删除了以下字符的特殊含义.但是,计算机如何处理这个以及在什么条件下以其他方式对待它?

例如\0,C编程中的空字符是字符串的结尾,但它是单个字符还是两个字符,即反斜杠+零?

反斜杠的目的是指示人类还是指示0-1计算机?

Mar*_*tos 8

反斜杠\是一个字符,就像字母A,逗号,和数字一样4.在某些编程语言中,特别是C及其后代(可能是祖先),它在字符串或字符文字中用于转义其他字符.例如,'\a'代表铃声字符,如果你打印它会从计算机发出一声蜂鸣声(printf("%c", '\a')).

作为C语言转义字符,它主要是编译器允许的人类构造,因此人类可以表达例如钟形字符.编译后的代码只存储字符-与值7字节只是要非常清楚,它并没有存储\后跟a.

在其他情况下,反斜杠在运行时对程序意味着什么.最着名的实例是正则表达式语法,其中反斜杠转义其他字符以便赋予它们特殊含义或带走它们可能具有的特殊含义.例如,grep '\<foo\>' file.txt将在file.txt中找到带有单词foo的行.在这种情况下,反斜线真的是有在运行时,通过与逃脱的程序进行解释<,并>遵循他们.在这种情况下,\<\>不能代表所有的字符; 它们分别表示与单词的开头和结尾的零宽度匹配.


Cod*_*ray 7

完全取决于具体情况.反斜杠可能意味着许多不同的东西,具体取决于您看到它们的使用位置.例如,在Windows中,通常将反斜杠视为路径分隔符.

在基于C语言的编程语言(以及其他脚本语言)中,它们是转义字符.他们指出,他们右边的角色应该与通常的角色不同.在您的示例中,\0是一个空终止符,反斜杠表示0编译器(和人类!)应该将其解释为空字符而不是数字零.它将被视为只有一个字符,因为一旦其函数被提供,反斜杠就会被删除 - 除了用作转义字符之外,它在该序列中没有任何意义.