假设在C中,我有以下代码:
i=5 \
+6;
Run Code Online (Sandbox Code Playgroud)
如果我打印i,它给了我11.
我不明白上面的代码是如何正确执行的.乍一看,由于无法识别的令牌,我猜它是编译器错误\.有人可以解释这个逻辑吗?它与最大的蒙克逻辑有关吗?
Eri*_*hil 10
一行的反斜杠告诉编译器忽略换行符.
这是一种在不中断源文本的情况下将行格式化为人类可读的方法.例如,如果您的长字符串用引号括起来,则可以使用反斜杠在新行上继续字符串,而不在字符串中插入换行符.
(在C标准添加相邻字符串的属性之前,这更有用,例如"abc" "def",连接.现在你可以将字符串放在连续的行上,它们将被连接起来.在此之前,你必须使用反斜杠来完成它.)
现在,反斜杠的最常见用法是,如此指出,继续预处理器宏定义.与常规C语句不同,预处理程序语句必须在一行上.但是,一些预处理器宏定义很长.为了(稍微)格式化它们,定义分布在多个物理行上,但反斜杠使它们成为编译器的一行(包括预处理器).
编译器会从源文本中完全删除反斜杠后跟换行符,而不像换行符本身.所以源文本:
abc\
def
Run Code Online (Sandbox Code Playgroud)
相当于单个标识符abcdef,而不是abc def.您可以在任何运算符或其他语言构造的中间使用它,除了三字符序列(三字符序列,例如??=,转换为替换字符,例如#,在反斜杠 - 换行处理之前):
MyStructureVariable-\
>MemberName
IncrementMe+\
+
Run Code Online (Sandbox Code Playgroud)
但是,不要这样做.合理使用它.