【问题标题】:where is __DARWIN_NULL macro definition?__DARWIN_NULL 宏定义在哪里?
【发布时间】:2015-07-23 18:40:44
【问题描述】:

我必须在函数中返回 nul,但我不允许包含任何库。我试图找出 NULL 是如何定义的,然后到 sys/_types/_null.h 才发现 NULL 实际上是 __DARWIN_NULL。伟大的 !现在,我不知道在哪里搜索才能找到 __DARWIN_NULL 定义...

【问题讨论】:

  • AFAIK,__DARWIN_NULL 是一个内置的编译器,所以你不会在任何头文件中找到它。
  • 不清楚您是想要 nul 字符还是 NULL 指针。随便你return 0

标签: c


【解决方案1】:

我必须在函数中返回 nul,但我不允许包含任何库。

这个问题的解决方案远比你做的简单;你实际上已经询问了XY problem 的形式。

您不会找到任何标准库中定义的 NUL 字符;最好的返回方式是使用常量'\0'0

如果您的教授教您避免使用<stddef.h> 来查找NULL,那么他/她设置了一个愚蠢的练习,其中涉及使用除了最适合工作的工具之外的其他工具,该工具由顺便说一句……我会提出这个问题。

尽管如此,有时教授并不在意,并且无论如何都会教你做愚蠢的事情。 NULL 定义为实现定义的空指针常量,通常是00void * 的转换,如下所示:((void *) 0)。这可能不是您的 NULL 解析为的实现定义的值;在这种情况下,请调整以适应:)

您可以添加一个预处理器定义,例如#define NULL ((void *) 0),然后您就可以从您的函数中添加return NULL;。达达!愚蠢的练习应该得到愚蠢的解决方案。

如果你的教授说你不能使用#define,我很想问他你被允许使用什么。即时更改要求是不公平的。大多数编译器允许您使用命令行参数设置预处理器常量,例如cc -DNULL='((void *) 0) ...'。这对于公开编译时配置选项很有用,但同样,使用它来定义 NULL 是愚蠢的。


标题中的问题与帖子的其余部分不同。 __DARWIN_NULL 也可以使用上述任何一种来定义,前提是它尚未定义,但我真的不认为这是回答您的实际问题所必需的。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    相关资源
    最近更新 更多