在语句中间用反斜杠计算表达式

假设在C中,我有以下代码:

i=5 \ +6; 

如果我打印i ,它给了我11。

我不明白上面的代码是如何正确执行的。 乍一看,我猜测它是编译器错误,因为无法识别令牌\ 。 有人可以解释这个逻辑吗? 它与最大的蒙克逻辑有关吗?

一行的反斜杠告诉编译器忽略换行符。

这是一种在不中断源文本的情况下将行格式化为人类可读的方法。 例如,如果您的长字符串用引号括起来,则可以使用反斜杠在新行上继续字符串,而不在字符串中插入换行符。

(在C标准添加了相邻字符串的属性之前,这是更有用的,例如"abc" "def" ,它们连接起来。现在你可以将字符串放在连续的行上,它们将被连接起来。在此之前,你必须使用反斜杠来做。)

如今,反斜杠的最常见用法是, 如此指出,继续预处理器宏定义。 与常规C语句不同,预处理程序语句必须在一行上。 但是,一些预处理器宏定义很长。 为了(有点)格式化它们,定义分布在多个物理行上,但反斜杠使它们成为编译器的一行(包括预处理器)。

编译器会从源文本中完全删除反斜杠后跟换行符,而不像换行符本身。 所以源文本:

 abc\ def 

相当于单个标识符abcdef ,而不是abc def 。 您可以在任何运算符或其他语言构造的中间使用它,除了三字符序列(三字符序列,例如??= ,在反斜杠 – 换行处理之前转换为替换字符,例如# ):

 MyStructureVariable-\ >MemberName IncrementMe+\ + 

但是,不要这样做。 合理使用它。

在一行末尾转义换行符的做法确实是为了将语句的延续标记为下一行。 显然,在旧的C编译器中需要它只有一个我确定它仍然需要的地方,那就是函数的宏定义,这在C ++中通常是不受欢迎的。

续行是以反斜杠结尾的行。 反斜杠被删除,以下行与当前行连接。 没有插入空格,因此您可以在任何位置拆分一条线,即使在单词的中间也是如此。 (通常在白色空间分割线条更具可读性。)

连续行上的尾部反斜杠通常称为反斜杠换行符。

如果反斜杠和行尾之间有空格,那么这仍然是一个连续的行。 但是,由于这通常是编辑错误的结果,并且许多编译器不会接受它作为续行,GCC会警告你。

参考