nil
はキーワードではありません。 [Mac OS X の場合] objc.hnil
で定義されています (そして実際には):__DARWIN_NULL
NULL
#ifndef nil
#define nil __DARWIN_NULL /* id of Nil instance */
#endif
つまり、nil
実際にはコンパイルされた言語の一部ではありませんが、システム ライブラリによって永続化されるコンパイル中に使用される規則です。
明らかに、髪を分割します。ただし、 Objective-C のソースを なしでコンパイルすることはできnil
ます。
これは、 「インターフェイスdeflate
を使用しているときに、名前が付けられた変数を持つツールを作成できますか?」と尋ねることに似ています。zlib.h
もちろん。しかし、それは醜いでしょう。
実際、コンパイラは objc.h を自動的にインクルードしません。これ:
#include <stdio.h>
int main() {
int nil = 5;
fprintf(stdout, "Hello %d\n", nil);
return 0;
}
Foundation をインポートし、したがって objc.h をインポートするプリコンパイル済み/プレフィックス ヘッダーを削除すると、標準の Foundation ツール プロジェクト (main.m 内) で問題なくコンパイルおよび実行されます。(つまり、そのままで、Xcode テンプレートはimportまたはによってobjc.h
インポートされます。)Cocoa/Cocoa.h
Foundation/Foundation.h