Zastrzeżone słowa kluczowe w Objective-C?

Na spotkaniu CocoaHeads Öresund wczoraj,peylow skonstruował świetny quiz ObjC. Konkurs był intensywny, a trzy osoby otrzymały ten sam wynik, gdy miało zostać ocenione ostatnie pytanie: Ile zarezerwowanych słów kluczowych dodaje Objective-C do C?

Nastąpiła burzliwa debata. Wszyscy się zgodzili@interface, @implementation itd. są wszystkie dyrektywy preprocesorowe, a nie słowa kluczowe, ale jak coś takiegoin? To może być słowo kluczowe, ale nie jestzarezerwowany słowo kluczowe. Na przykład poniższe kompilują się bez błędów lub ostrzeżeń:

NSArray* in;
for (in in in)
   NSLog(@"bwahahaa");

Doszliśmy do wniosku, że ObjC dodajeNie zarezerwowane słowa kluczowe do C, a ktoś wygrał pozornie zasłużoną książkę.

Ale dzisiaj próbowałem trochę bardziej systematycznego nadużywania kompilatora, próbując takich rzeczy:

int self = 45;
self++;
int y = self;

To dobrze się kompiluje i ten sam kod działa zastępując własny kodBOOL, bycopy, inout, oneway, byref, SEL, iIMP.

Za pomocąid jako nazwa zmiennej, pierwsza i ostatnia linia kompilują się, ale nie druga. To samo dotyczyProtocol, iClass.

Za pomocąsuper, pierwsza linia się kompiluje, ale nie druga i trzecia.

ZYES, NO, iNULL, wszystkie trzy linie nie kompilują się, prawdopodobnie dlatego, że są zdefiniowane jakotrue, false, inil.

Wygląda na to, że większość z nich jest zdezorientowana i nie jestem pewien, czy odzwierciedla to, co jest i nie jest zarezerwowanym słowem kluczowym w Objective-C. Dlaczego, na przykład, jest dobrze używaćself jako nazwa int, ale niesuper?

Fakt, że pierwsze zadanie zawsze działa (z wyjątkiem YES, NO i NULL) wydaje się potwierdzać pogląd, że żaden z kandydatów nie jest technicznie zastrzeżonym słowem kluczowym, którego nie ma w C. Lub?

Czy ktoś mógłby nam podać autorytatywne wyjaśnienie tej drażliwej kwestii?

Stawką jest honor kilku ludzi.

EDYCJA: Jak zauważył Nikolai Ruhe, potrzebujemy jasnej definicji „słowa kluczowego”, aby kontynuować. Niko przytoczył artykuł w Wikipedii mówiący, że słowo kluczowe to „słowo lub identyfikator, który ma szczególne znaczenie”.

Myślę, że rozsądne jest użycie tej definicji z tego samego artykułu:

W wielu językach, takich jak C i podobne środowiska, takie jak C ++, słowo kluczowe jest słowem zastrzeżonym, które identyfikuje formę składniową. Słowa używane w konstrukcjach przepływu sterowania, takie jak if, then, i else są słowami kluczowymi. W tych językach słowa kluczowe nie mogą być również używane jako nazwy zmiennych lub funkcji.

Ponadto, jak stwierdza artykuł:

Zazwyczaj, gdy programista próbuje użyć słowa kluczowego dla nazwy zmiennej lub funkcji, zostanie uruchomiony błąd kompilacji.

W tym sensie istnieją zatem jakieś zastrzeżone słowa kluczowepredefiniowane w formalnych specyfikacjach języka i nie mogą być używane jako nazwa zdefiniowana przez użytkownika?

questionAnswers(6)

yourAnswerToTheQuestion