2008-10-28 74 views
2

至少libsigC++ 2项目在预处理器级别上定义nil的OS X头中,命名空间之外等等。至少10.5.5和XCode 3.1有这个。请注意,它不仅在Objective-C源中有效,而且在C++中也是如此。为什么OS X定义为'nil'

简短的问题:为什么?

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

附:我还记得Objective-C的nil。但我没有看到其他语言的这种钝(imho)定义的理由,影响了与Objective-C完全无关的代码(s.a.纯C++项目)。

+0

其实,我同意你的看法。这是他们的OS和他们修改了GCC编译器的版本,如果要定义一个非标准的预处理器符号,它是他们的特权。微软一直都在这样做。如果你不喜欢自己的编译器和头,让不同的人。 – paxos1977 2008-10-29 02:25:56

回答

1

我使用的是10.5.6和XCode 3.1.2。我只是想在我的纯CPP项目使用nil,并没有定义:

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

我的猜测是,你的项目以某种方式包括可可或其他的Objective-C库。也许你的代码正在编译为Objective-C++?它可以编译任何C++和Objective-C的组合,因此现有的C++代码可以编译。这是扩展名为.mm的文件的默认值。

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

我也可以通过/ usr/include目录grepped,并没有发现任何#define nil实例。

[编辑:该.h文件链接到您可能#undef nil,因为它也可以从目标-C++使用]