2010-12-10 17 views

Répondre

11

x+++++y est analysé comme x ++ ++ + y et non comme x ++ + ++ y. Selon Maximal Munch principle « le tokenizer devrait continuer à lire les caractères du fichier source jusqu'à ce que l'ajout d'un caractère plus provoque le jeton actuel de cesser de faire sens »

x++ ++ +y ne devrait pas compiler (en C et C++) parce que l'opérateur de post-incrémentation ++ nécessite un lvalue comme argument et renvoie un rvalue.

+0

Ceci est vrai pour toutes les langues qui utilisent avide/plus longue correspondance regexes pour tokenization - qui devrait être la plupart d'entre eux (en fait, je ne peux pas penser à celui qui ne le fait pas). – delnan

+0

* "' x ++ ++ + y' ne devrait pas compiler "* Et en effet, ce n'est pas le cas (sur' gcc' de toute façon): 'error: lvalue requis comme incrément operand' Wow, j'étais soulagé de voir ça. –

+0

Malheureusement, toutes les formes de '+++++++++' ne sont pas compilables. MSVC accepte au moins heureusement certains d'entre eux et ensuite WTF sait quoi avec elle. Il y a cette petite utilité interne à nous qui a toujours été donnée à un stagiaire (pas ma décision). Il y a de la merde comme ça partout. –