2011-07-14 15 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字句トークナイザは欲張りなので、優先順位の規則が適用される前に、あなたの表現は

x -- - y 

としてトークン化されます。

+0

好奇心の高まりから、これは実装定義の動作ですか、標準では貪欲であることを強制していますか?異なるプラットフォーム/コンパイラでこの動作に頼ることはできますか? – RedX

+0

@RedX:私はあなたがこれに頼ることができると確信しています。私は特定の参照を見つけることができませんが、その動作はCのためのこのレクサーによって暗示されています:http://www.lysator.liu.se/c/ANSI-C-grammar-l.html –