【问题标题】:Why does OS X define 'nil'为什么 OS X 定义'nil'
【发布时间】:2008-10-28 19:23:44
【问题描述】:

至少 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

附言我也记得来自 Objective-C 的nil。但是我看不出这样一个对其他语言的直率(恕我直言)定义的合理性,这会影响与 Objective-C 完全无关的代码(s.a.纯 C++ 项目)。

【问题讨论】:

  • 其实我不同意你的观点。如果他们想定义一个非标准的预处理器符号是他们的特权,那是他们的操作系统和他们修改过的 GCC 编译器版本。微软一直在这样做。如果您不喜欢他们的编译器和头文件,请使用不同的。
  • 你确定一个纯 C++ 项目,只有 标头(没有系统 .h 标头)被定义为 nil 吗?

标签: c++ macos


【解决方案1】:

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

main.cpp:41: 错误:'nil' 未在此范围内声明

我的猜测是您的项目不知何故包含了 Cocoa 或其他 Objective-C 库。也许您的代码正在编译为 Objective-C++?它可以编译 C++ 和 Objective-C 的任意组合,因此现有的 C++ 代码也可以编译。这是扩展名为 .mm 的文件的默认设置。

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

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

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

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多