nil
не является ключевым словом. nil
определяется в objc.h [в Mac OS X] (а __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 (в main.m) после удаления прекомпилированного заголовка / префикса, который импортирует Foundation и, следовательно, objc.h. (Итак, да, из коробки шаблоны Xcode do заставляют импортировать objc.h
путем импорта Cocoa/Cocoa.h
или Foundation/Foundation.h
.)