至少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 ++项目)。
答案 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 ++中使用。]