2015-12-06 2 views
6

Wenn ich die Variable wieFührt die folgende Deklaration der Variablen zu einem lexikalischen oder syntaktischen Fehler?

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

Jetzt erkläre ich bin nicht der Grund für diese bekommen, mir nach, wenn die Figur eine zum ersten Mal nach diesem Symbol gelesen wird/gelesen wird, so ist es, dass es schaltet zu einem anderen Zustand von DFA, um ein anderes Muster zu erkennen, also keinen Fehler, während es im zweiten Fall nach dem Lesen eines Kommentars eine andere Sequenz findet, die nicht zum formalen Muster gehören könnte, daher wird es in einem nicht endgültigen Zustand des endlichen Automaten angehalten aufgrund dessen es einen Fehler gibt.

Bitte löschen Sie diese Verwirrung.

+0

Vielleicht versagt der Parser aufgrund von massivem Mangel oder falschem Platzieren von Kommas ...? ;-) – alk

Antwort

6

Nach dem C Standard (5.1.1.2 Translation Phasen)

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

So ist diese Linie

int a/*comment*/bc; 

nach der Übersetzungsphase entsprechen

int a bc; 

aber man kann schreiben :)

int a\ 
bc; 

vorausgesetzt, dass bc; beginnt an der ersten Position der nächsten Zeile.

5

Während der Vorverarbeitung werden Kommentare durch einen einzelnen Leerzeichen ersetzt.

Ihr Code wird:

int a bc; 
6

C11 Standard Abschnitt 5.1.1.2 "Translation Phasen", Phase 3:

... Jeder Kommentar durch ein Leerzeichen ersetzt. ...

Kommentare werden während (gut, just before) die Vorverarbeitungsphase der C-Kompilierung ersetzt. Dies ist bevor "echtes" Parsen auftritt. Kommentare werden daher im Hauptteil der C-Sprache als Leerzeichen betrachtet.