我正在实现一个 C 编译器并发现了一个奇怪的问题。由于 &&& 具有更高的优先级,将其视为第一个操作数与第二个地址的二进制和似乎是合理的:

x && y = (x) & ( &(y) )

C 规范的语法概述似乎允许这种解释。我可能遗漏或误读了什么?

我对语法的理解:

最佳答案

C 运算符表达式通过称为“maximal munch”1) 的东西进行解析,这意味着从左到右,编译器会查找可以形成有效标记的最长符号块。由于 x &&x & 长,编译器会选择前者。

这就是为什么像 x+++1 这样的代码可以编译,+++x 不能,而 + ++x 可以。

1) C11 §6.4 Lexical elements ¶4 :

关于c - 为什么 `x && y` 没有被解析为 `x & (&y)` ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48437833/

10-11 22:59
查看更多