Le côté obscure¤
Shadowy escape¤
Exercice 1 : Shadowy escape
Que retourne la fonction f
?
```c
include ¤
int x = 42 ; int f() { int x = 23 ; { extern int x ; return x ; } }
Exercice 2 : Curieux entier
Que vaut x
-
-
-
-
-
multi-character character constant
Exercice 4 : La règle gourmande
Que vaut x
Solution
L'expression x+++x++
est équivalente à x++ + x++
. L'opérateur ++
est associatif à droite, donc x++
est évalué en premier, puis x++
est évalué. x
est incrémenté deux fois, donc x
vaut 2. On parle de greedy lexer rule. Le parseur est gourmand et prend le plus grand nombre de caractères possible pour former un jeton.
Cela ne fonctionne pas à tous les coups. L'expression x+++++y
est invalide car l'opérateur ++
ne peut pas être suivi d'un autre opérateur ++
. Il est nécessaire dans ce cas de séparer les opérateurs par des espaces pour que le code soit valide : x+++ ++y
.