[英]Why is `x && y` not parsed as `x & (&y)`?
我正在實現一個C編譯器,並發現了一個奇怪的問題。 由於&
具有比&&
更高的優先級,因此將它視為二進制並且第一個操作數與第二個地址一起考慮似乎是合理的:
x && y = (x) & ( &(y) )
C規范的語法概述似乎允許這種解釋。 我可能錯過或誤讀了什么?
我對語法的理解:
andExpression:= equalityExpression | (andExpression'&'equalityExpression)| ...
...
unaryExpression:= postfixExpression | (('&'|'*'|'+'|' - '|'〜'|'!')castExpression)| ...
C運算符表達式通過稱為“ maximal munch ” 1)的方式進行解析,這意味着從左到右,編譯器會查找可以形成有效標記的最長符號塊。 由於x &&
比x &
,編譯器會選擇前者。
這就是為什么像x+++1
編譯的代碼, +++x
不編譯,而+ ++x
編譯的原因。
1) C11§6.4詞匯元素¶4 :
如果輸入流已被解析為預處理令牌直到給定字符,則下一個預處理令牌是可構成預處理令牌的最長字符序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.