2011-07-14 50 views
2
#include <stdio> 
int main(){  

     int x = 4; 
     int y = 3; 
     int z; 

     z = x---y; 
     printf("%d" , z); 
     return 0; 
} 

Linux Mandriva中的gcc編譯器將其評估爲(x--)-y。 我很困惑,爲什麼會這樣。 它可能是x - (--y)C中的表達式評估

我知道一些答案會告訴我看優先表。我經歷了所有這些,仍然存在疑問。

請有人澄清這一點。

回答

4

規則是「當獲取下一個標記時,使用可能構成有效標記的最長字符序列」。所以-----後面是-而不是其他方式。優先事實上與此無關。

9

與c詞法tokeniser是貪婪的,所以應用的優先級規則之前,你的表達被標記化作爲

x -- - y 

+0

出於好奇,這是一個實現定義的行爲還是標準要求它是貪婪?我可以在不同的平臺/編譯器上依賴這種行爲嗎? – RedX

+0

@RedX:我相當肯定你可以依靠這個。我找不到具體的參考文獻,但這個詞法分析器對C語言的行爲是隱含的:http://www.lysator.liu.se/c/ANSI-C-grammar-l.html –