objc.h で定義されている Nil と nil は __DARWIN_NULL の typedef (10.5 で導入された?) それ以前は nil は 0 。64bit 環境の為と思われる。 参考 Re: Checking for NULL (was “Re: Can’t get setDelegate to work…”)”)
sys/_types.h
#ifdef __cplusplus
#ifdef __GNUG__
#define __DARWIN_NULL __null
#else /* ! __GNUG__ */
#ifdef __LP64__
#define __DARWIN_NULL (0L)
#else /* !__LP64__ */
#define __DARWIN_NULL 0
#endif /* __LP64__ */
#endif /* __GNUG__ */
#else /* ! __cplusplus */
#define __DARWIN_NULL ((void *)0)
#endif /* __cplusplus */
CFBase.h
#if !defined(NULL)
#if defined(__GNUG__)
#define NULL __null
#elif defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
stddef.h
clang 2.8 (Developer tools でインストールしたものではない)
#undef NULL
#ifdef __cplusplus
#undef __null // VC++ hack.
#define NULL __null
#else
#define NULL ((void*)0)
#endif
clang 1.6
#undef NULL
#ifdef __cplusplus
#define NULL __null
#else
#define NULL ((void*)0)
#endif
clang 1.0
#ifdef __cplusplus
#define NULL __null
#else
#define NULL ((void*)0)
#endif
gcc 4.2.1 && llvm-gcc 4.2
/* A null pointer constant. */
#if defined (_STDDEF_H) || defined (__need_NULL)
#undef NULL /* in case <stdio.h> has defined it. */
#ifdef __GNUG__
#define NULL __null
#else /* G++ */
#ifndef __cplusplus
#define NULL ((void *)0)
#else /* C++ */
#define NULL 0
#endif /* C++ */
#endif /* G++ */
#endif /* NULL not defined and <stddef.h> or need NULL. */
#undef __need_NULL