2015-11-12 11 views

risposta

13

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.

+0

Così accade per ogni nome che finisce con 'e' o' E': / – Jarod42

Problemi correlati