作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设在 C 中,我有以下代码:
i=5 \
+6;
如果我打印 i
,它会给我 11。
我不明白上面的代码是如何正确执行的。乍一看,我猜是编译器错误,因为无法识别 token \
。有人可以解释一下逻辑吗?与最大咀嚼逻辑有关吗?
最佳答案
行尾的反斜杠告诉编译器忽略换行符。
这是一种在不中断源文本的情况下格式化行以供人类阅读的方法。例如,如果您有一个用引号括起来的长字符串,您可以使用反斜杠在新行上继续该字符串,而无需在字符串中插入换行符。
(这在 C 标准添加相邻字符串(例如 "abc""def"
)连接的属性之前更有用。现在您可以将字符串放在连续的行上,它们将连接起来。在此之前,您必须使用反斜杠来执行此操作。)
现在反斜杠最常见的用法是,如 heretolearn指出,继续预处理器宏定义。与常规 C 语句不同,预处理器语句必须在一行中。然而,一些预处理器宏定义相当长。为了(某种程度上)很好地格式化它们,一个定义分布在多个物理行上,但反斜杠使它们成为编译器(包括预处理器)的一行。
与换行符本身不同,编译器将反斜杠后跟换行符完全从源文本中删除。所以原文:
abc\
def
等同于单个标识符abcdef
,而不是abc def
。您可以在除三字母序列之外的任何运算符或其他语言构造的中间使用它(三字母序列,例如 ??=
,将转换为替换字符,例如 #
, 在反斜杠换行处理之前):
MyStructureVariable-\
>MemberName
IncrementMe+\
+
但是,不要那样做。合理使用。
关于c - 在语句中间使用反斜杠评估表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19495776/
我是一名优秀的程序员,十分优秀!