【问题标题】:Phase two of source file translation?源文件翻译的第二阶段?
【发布时间】:2018-01-22 17:23:34
【问题描述】:

我目前正在阅读此article,但我无法理解第 2 阶段。

每当反斜杠出现在行尾时(紧跟 由换行符),反斜杠和换行符都被删除, 将两条物理源线合并为一条逻辑源线。

我知道换行符后面的反斜杠可以出现在引号内,但是第 2 阶段的解释好像换行符可以单独使用,例如

int var = 2; \n

尤其是第 2 部分:

如果非空源文件不以换行符结尾 在这一步之后(无论它最初没有换行符,还是它结束了 带反斜杠),行为未定义(C++11 前)a 添加了终止换行符(C++11 起)。

“如果源文件没有结束换行符”?再一次,听起来换行符可能出现在某种字符串之外——它们是什么意思?如果文件总是被引号包围,文件怎么能以换行符结尾?

【问题讨论】:

  • 源代码是纯文本,纯文本也有换行符(虽然大多数编辑器默认不显示),否则你怎么能把代码放在两个不同的行上?
  • 引号是指源文件中的换行符(也是字符),而不是用于表示字符串中的换行符的两个字符'\'和'n'。
  • 标准中所说的换行符是您在代码编辑器中使用返回按钮键入的换行符。
  • 请注意,文字 \n 不是换行符。这是一个编码。
  • @UnholySheep Ahhh 现在它开始变得有意义了。所以当我按回车并开始换行时,我在实际源代码中隐式添加了换行符?

标签: c++


【解决方案1】:

\n 表示在带引号的字符串文字内时的换行符。 \n 本身不是换行符。换行符是字节0x0A(换行,Linux 使用)或0x0D(回车,Mac 使用)(参考ASCII 表)。在 Windows 上,两个字节的存在都表示换行符(回车后跟换行符,通常称为 CRLF)。

当您在键盘上按下回车键时,您会在源代码中插入一个换行符。 \n 只是所谓的转义序列。当字符不能直接合法地写入字符串文字时,这是一种在字符串文字中表示字符的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2013-11-07
    • 2016-08-13
    相关资源
    最近更新 更多