为什么OS X定义'nil'

时间:2008-10-28 19:23:44

标签: c++ macos

至少libsigc ++ 2项目受到在预处理器级别,名称空间等之外定义nil的OS X标头的攻击。至少10.5.5和XCode 3.1具有此功能。请注意,它不仅在Objective-C源中有效,而且在C ++中也有效。

简短的问题:为什么?

http://ardour.sourcearchive.com/documentation/2.5/functor__trait_8h-source.html

P.S。我也记得来自Objective-C的nil。但我没有看到其他语言的这种直接(imho)定义的理由,影响与Objective-C完全无关的代码(s.a.纯C ++项目)。

1 个答案:

答案 0 :(得分:1)

我正在使用10.5.6和XCode 3.1.2。我刚尝试在我的纯cpp项目中使用nil,并且没有定义:

main.cpp:41: error: 'nil' was not declared in this scope

我的猜测是你的项目以某种方式包括Cocoa或另一个Objective-C库。也许你的代码被编译为Objective-C ++?它可以编译C ++和Objective-C的任意组合,因此可以编译现有的C ++代码。这是扩展名为.mm的文件的默认设置。

您是否为此库创建了XCode项目?如果是这样,也许它正在使用Framework模板附带的XCode的前缀头,其中包括Cocoa / Cocoa.h。检查项目和目标信息中的“前缀标题”选项。

我还通过/ usr / include进行了搜索,但没有找到#define nil的任何实例。

[编辑:您链接到的.h文件可能#undef nil,因为它也可以在Objective-C ++中使用。]