nilはキーワードではありません。 [Mac OS X の場合] objc.hnilで定義されています (そして実際には):__DARWIN_NULLNULL
#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.hFoundation/Foundation.h