2015-12-06 8 views
6

Jeśli oświadczam zmienną jakCzy poniższa deklaracja zmiennej prowadzi do błędu leksykalnego lub błędu składniowego?

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

Teraz nie dostaję Powodem jest, według mnie, gdy postać jest odczytywany po raz pierwszy po tym symbolu/odczytywany jest więc jest to, że przełączniki do jakiegoś innego stanu DFA dla rozpoznania jakiegoś innego wzoru, a więc bez błędu, podczas gdy w drugim przypadku po przeczytaniu komentarza znajduje inną sekwencję, która nie mogłaby należeć do wzorca formalnego, dlatego zostaje zatrzymana w jakimś nieostatecznym stanie skończonego automatu dzięki czemu daje błąd.

Proszę usunąć to zamieszanie.

+0

Być może parser nie działa z powodu dużego braku lub niewłaściwego umieszczenia przecinków ...? ;-) – alk

Odpowiedz

6

Według C Standard (5.1.1.2 fazy Translation)

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

Tak więc ta linia

int a/*comment*/bc; 

po fazie tłumaczenia jest równoznaczne

int a bc; 

ale można napisz :)

int a\ 
bc; 

pod warunkiem, że bc; rozpoczyna się na pierwszej pozycji następnego wiersza.

5

Podczas przetwarzania wstępnego komentarze są zastępowane pojedynczymi białymi znakami.

Kod staje:

int a bc; 
6

C11 standardowy punkt 5.1.1.2 "fazy Translation", faza 3:

... Każdy komentarz jest zastąpiony przez jeden znak spacji. ...

Komentarze są zastępowane podczas (dobrze, just before) w fazie wstępnej kompilacji C. Jest to przed "prawdziwym" analizowaniem. Komentarze są więc uważane za równoważne białym spacji w głównej części języka C.

Powiązane problemy