2012-07-13 12 views
5

Patrzę na Objective-C i zauważam, że na przykład deklaracja klasy interfejsu zaczyna się od @interface. W porządku, nie ma problemu. W związku z tym tekst sugeruje, że nie ma przestrzeni pomiędzy @ i interface. Jednak, gdy mijam następujący prosty przykład do kompilatora GCC w pliku *.m:Czy spacje są dozwolone po rozpoczęciu deklaracji @ w obiekcie Objective-C?

@ interface A 
@ end 

kompilator przyjmuje kod bez zarzutu. Czy ktokolwiek może wskazać Mnie w kierunku odniesienia, które mówi jednoznacznie, czy @ interface czy też nie jest akceptowalne w specyfikacji Celu C? W dokumentach Apple z 2008 i 2011 roku nie znalazłem niczego, co mogłoby powiedzieć w taki czy inny sposób poza prostym tekstem nawiązującym do wcześniejszego pytania.

Z góry dziękuję.

EDIT: Warto zauważyć, że Emacs wykonuje kolorowanie tekstu na podstawie tego, czy identyfikator jest słowem kluczowym, czy nie; słowa kluczowe są niebieskie, a słowa niebędące słowami kluczowymi - żółte. @interface kolory niebieski i @ interface kolory żółty. Podobne zachowanie występuje w Vimie.

+1

Języki typu C wydają się luźne, gdy białe znaki mogą pojawić się w pobliżu symboli. Zgaduję, że przestrzeń naprawdę nie ma znaczenia, szczególnie jeśli, jak mówisz, kompiluje. – Almo

+0

Tak, nie pamiętam, aby kiedykolwiek widziałem ten problem w dowolnej dokumentacji. W przeważającej części '@' służy do uruchamiania preprocesora Objective-C do robienia specjalnych rzeczy, w taki czy inny sposób, więc to decyduje o tym preprocesor, a nie kompilator C. (Dobre pytanie!) –

+0

Interesujący punkt, Hot Licks, z wyjątkiem dokumentacji Objective-C, którą określiłem '@ interface' jest dyrektywą kompilatora, różniącą się od dyrektyw preprocesora, takich jak' # import'. –

Odpowiedz

3

Nie ma formalnej specyfikacji dla celu C (poza The Objective-C Programming Language). Z całą pewnością nie ma definicji konwencji białych znaków w stylu BNF. Jeśli się kompiluje, chodzi o to, że mamy najbliższy "legalny". Dotyczy to wielu języków. Perl na przykład jest najlepiej zdefiniowany jako "te ciągi, których plik wykonywalny perl nie odrzuci." (Przynajmniej moim zdaniem ....)

Powiedziawszy, właściwy styl to @interface bez spacji. Zobacz Defining a Class.