compiler-construction - 反斜杠 "\"到底是什么意思?

标签 compiler-construction

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

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

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

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

最佳答案

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

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

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

关于compiler-construction - 反斜杠 "\"到底是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254887/

相关文章:

regex - (a*+b*) 生成的字符串是什么类型

java - 如何使用 Java 将每个文件存储在 zip 存档中的数组中?

c# - 编译器琐事 : What is consequence of this code

c# - 如何在 C# 中强制使用方法的返回值?

c++ - 异常、 move 语义和优化 : at compiler's mercy (MSVC2010)?

command-line - ffmpeg:使用更多选项执行

java - java .class 文件在不同编译器、版本、依赖项之间的差异是什么?

java - 为什么泛型类和方法声明中不能使用通配符?

c - 我是否需要在编译时添加一个 _REENTRANT 宏以使我的 errno 线程安全?

compiler-construction - 引导编译器:为什么?