这个回报值的目的是什么?

时间:2011-07-16 10:08:45

标签: c multithreading

我遇到了一些我无法在Google或SO上找到答案的代码。我正在寻找一个线程函数,它返回void *,如你所料。但是,在线程函数结束之前它会突然拉出这个特技,

return (void*) 0;

那是什么目的?我无法理解它。

编辑:

在理解了这与NULL相同之后 - 我认为他们用它来跳过包括stdlib。

2 个答案:

答案 0 :(得分:2)

(void*)0是空指针,又名NULL(实际上是在几个头文件中定义的宏,例如stddef.hstdio.h,基本上相同事情为(void*)0)。

更新:

如何解释空指针及其用处?基本上,它是一个特殊值,表示“此指针不指向任何地方”,或者“此指针未设置为有效的对象引用。”

历史记录:Tony Hoare,据说他在1965年发明了空引用,众所周知对这一发明感到后悔,因而称之为"Billion Dollar Mistake"

每当使用指针时,必须确保永远不要取消引用空指针(因为它没有按定义引用任何内容)。无论如何,如果你这样做,你至少会得到异常程序终止,一般保护错误或者意外的程序行为。

答案 1 :(得分:0)

好吧,我没有遇到过任何C ++编译器,说NULL0无法转换为void*(或者来自int*)。但是可能会有一些智能编译器或静态分析工具将0 to void-pointer转换报告为警告。

该语句通常出现在回调实现中(如线程例程),它必须遵循所要求的回调原型(pthread_createCreateThread等)。因此,在实现该功能时,必须返回所需的相同类型。对于pthread_create 例程,您必须返回void* - 这就是return (void*)0;所在的原因。