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

时间:2010-11-23 10:10:36

标签: compiler-construction

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

作为C语言转义字符,它主要是编译器允许的人类构造,因此人类可以表达例如钟形字符。编译后的代码只存储字符 - 一个值为7的字节。为了绝对清楚,它存储\后跟a

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:0)

反斜杠只表示如果它使用的情况认为是特殊的东西。例如,许多编程语言在字符串中将它们用作escape characters。这通常会改变下一个字符的含义。