2008-10-28 75 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++使用]