2010-12-10 27 views

Odpowiedz

11

jest analizowany jako x ++ ++ + y, a nie jako x ++ + ++ y. Według Maximal Munch principlena tokenizera powinien zachować czytania znaków z pliku źródłowego, aż dodanie jeszcze jednego znaku powoduje bieżącego tokenu zatrzymać sensu

x++ ++ +y nie powinien skompilować (w C i C++) ponieważ operator postinkrementacja ++ wymaga lvalue jako argumentu i zwraca wartość rvalue.

+0

Dotyczy to wszystkich języków, które używają chciwego/najdłuższego dopasowania regexes dla tokenizacji - która powinna być większość z nich (właściwie nie mogę wymyślić takiej, która nie). – delnan

+0

* "' x ++ ++ + y' nie powinno się kompilować "* I rzeczywiście, tak nie jest (na' gcc'): 'error: lwartość wymagana jako argument operacji przyrostu 'Wow poczułem ulgę, widząc to. –

+0

Niestety, nie wszystkie formy "+++++++++" są nieopakowane. MSVC przynajmniej szczęśliwie akceptuje niektóre z nich, a następnie WTF wie, co z nim. Jest taka niewielka, wewnętrzna użyteczność, którą zawsze dawano stażyście (a nie mojej decyzji). W tym wszystkim jest takie gówno. –