2015-12-06 6 views
6

Se io dichiaro la variabile comeLa seguente dichiarazione della variabile porterà a errore lessicale o errore sintattico?

int a/*comment*/ ; //This does not give any error . 
int a/*comment*/bc; This gives error 

Ora io non sto ottenendo il motivo alla base di questo, secondo me, quando il personaggio di un si legge per la prima volta dopo quel simbolo/viene letta in modo è che si passa in qualche altro stato di DFA per riconoscere qualche altro pattern, quindi nessun errore mentre nel secondo caso dopo che il commento è stato letto, trova qualche altra sequenza che non può appartenere al modello formale quindi si blocca in uno stato non finito di automa finito a causa della quale dà un errore.

Si prega di chiarire questa confusione.

+0

Forse il parser fallisce a causa della mancanza massiccia o del collocamento errato di virgole ...? ;-) – alk

risposta

6

Secondo il C standard (5.1.1.2 fasi Translation)

3. ...Each comment is replaced by one space character. 

Così questo linea

int a/*comment*/bc; 

dopo la fase di traduzione è equivalente a

int a bc; 

ma si potrebbe scrivi :)

int a\ 
bc; 

a condizione che bc; inizi nella prima posizione della riga successiva.

5

Durante i commenti di pre-elaborazione vengono sostituiti con un singolo spazio.

il codice diventa:

int a bc; 
6

C11 sezione standard 5.1.1.2 "fasi di traduzione", fase 3:

... Ogni commento è sostituito da un carattere di spazio. ...

I commenti vengono sostituiti durante (beh, just before) la fase di pre-elaborazione della compilazione C. Questo è prima che si verifichi l'analisi "reale". I commenti sono quindi considerati equivalenti agli spazi bianchi nella parte principale del linguaggio C.

Problemi correlati