【发布时间】:2011-11-08 10:04:41
【问题描述】:
我有一个有趣的问题,我相信有人会遇到。我在 Objective C Cocoa 中编写前端 UI,在 C++ 中编写后端。在 C++ 中我有
#define NULL 0
不幸的是,这对 nil 产生了可怕的后果。特别是对于 nil 终止的函数调用,因为我现在收到此警告 - “方法调度中缺少哨兵”,我认为这意味着它找不到 nil 终止符。这是我能找到的关于 nil 的唯一定义:
#ifndef NULL
#define NULL __DARWIN_NULL
#endif /* ! NULL */
#ifndef nil
#define nil NULL
#endif /* ! nil */
在我看来,nil 是 NULL,而我之前对 NULL 的定义正在搞砸一切,尽管我不知道怎么做。 NULL 在 C++ 中定义,因此它可以独立于平台。我曾尝试重新定义 NULL 和 nil,但似乎没有任何意义。任何有关正确方法的建议将不胜感激。
【问题讨论】:
-
我想我明白你想做什么......但可以举一个具体的例子吗?
-
当我使用#define NULL 0 后,基本上'nil' 会停止正常工作。所以像 [[NSGradient alloc] initWithColorsAndLocations:... nil] 这样的定义不适用于该定义。但是后端需要定义。
-
你为什么需要这个定义? C++代码只能使用
0;NULL宏仅用于向后兼容 C。
标签: c++ objective-c xcode cocoa