昨天在CocoaHeadsÖresund會議上,peylow已經構建了一個偉大的ObjC測驗。當最終的問題進行評估時,競爭非常激烈,三人留下了相同的分數:Objective-C添加到C的保留關鍵字有多少?Objective-C中的保留關鍵字?
隨後發生了一些激烈的辯論。大家一致認爲@interface
,@implementation
等都是預處理器指令而不是關鍵字,但是怎麼樣像in
?它可能是一個關鍵字,但它不是一個保留的關鍵字。例如,下面將編譯沒有錯誤或警告:
NSArray* in;
for (in in in)
NSLog(@"bwahahaa");
我們得出的結論是ObjC增加沒有保留關鍵字C,有人贏得了一個看似很好賺來的書。
但今天我試着編譯一些更爲系統的濫用,試圖像這樣的事情:
int self = 45;
self++;
int y = self;
,編譯的罰款,並在相同的代碼工作替換爲自己和BOOL, bycopy, inout, oneway, byref, SEL,
IMP
。
使用id
作爲變量名,第一行和最後一行編譯,但不是第二行。 Protocol
和Class
也是如此。
使用super
,第一行編譯,但不是第二行和第三行。
隨着YES
,NO
,並NULL
,所有三行無法編譯,可能是因爲他們只是定義爲true
,false
和nil
。
它看起來像我很多這是海灣合作委員會越來越困惑,我不太確定它反映什麼是和不是保留在Objective-C中的關鍵字。爲什麼,例如,可以使用self
作爲int的名稱,而不是super
?
第一個賦值總是起作用的事實(除了有YES,NO和NULL)看起來似乎支持這樣一種觀點,即沒有一個候選是C中未找到的技術上保留的關鍵字。
有人能給我們一個這個棘手問題的權威解釋嗎?
幾個人的榮譽危在旦夕。
編輯:正如Nikolai Ruhe指出的,我們需要明確定義「關鍵字」才能繼續。 Niko引用了一篇維基百科文章,指出一個關鍵字是「具有特定含義的詞或標識符」。
我認爲是合理使用這種定義從同一文章:
在許多語言中,例如C和 類似的環境,如C++,一個 關鍵字是一個保留字,其 識別語法形成。單詞 用於控制流程結構中,如 就好像那麼,否則就是關鍵字。在 這些語言中,關鍵字不能也用 作爲變量名或 函數。
此外,作爲物品的狀態:
典型地,當程序員試圖 使用關鍵字對變量或 函數名,一個編譯錯誤 將被觸發。
從這個意義上說,那麼是否有任何保留的關鍵字是predefined in the language’s formal specifications and cannot be used as a user-defined name?
一些相關材料在這裏:http://stackoverflow.com/questions/25749/what-does-the-symbol-represent-in-objective-c – Felixyz 2009-12-19 00:55:38