Maximal Munch colpisce ancora.
[lex.pptoken]/P3:
Se il flusso di input è stato analizzato in pre-elaborazione gettoni fino ad un determinato carattere :
- [due eccezioni non rilevante qui]
- In caso contrario, il successivo token di preelaborazione è la sequenza di caratteri più lunga che potrebbe costituire un token di preelaborazione, anche se tale causerebbe il fallimento di un'ulteriore analisi lessicale, tranne che a nome-intestazione (2.8) è formato solo all'interno di una direttiva
#include
(16.2).
Il problema è che 0e1_e+0
, a differenza 0e1_a+0
, è un numero preelaborazione valido ([lex.ppnumber]):
pp-number:
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number ’ digit
pp-number ’ nondigit
pp-number e sign
pp-number E sign
pp-number .
Come risultato, 0e1_e+0
viene analizzato come singolo pp- numero token di preelaborazione, quindi esplode in seguito perché non può essere convertito in token valido (per ovvi motivi).
0e1_a+0
, d'altra parte, viene analizzata come tre gettoni, 0e1_a
, +
e 0
, e tutto va bene.
fonte
2015-11-12 11:18:33
Così accade per ogni nome che finisce con 'e' o' E': / – Jarod42