__DARWIN_NULL宏定义在哪里?

时间:2015-07-23 18:40:45

标签: c

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

1 个答案:

答案 0 :(得分: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也可以使用上述任何一种来定义,只要它尚未定义,但我真的认为不需要回答你的实际问题。