[英]What's the purpose of -Wbad-function-cast, why does it only apply to the direct return value?
[英]What is the purpose of this return value?
我遇到了一些在 Google 或 SO 上找不到答案的代码。 我正在查看一个线程 function 如您所料返回 void* 。 然而,在线程 function 结束之前,它突然拉了这个噱头,
return (void*) 0;
这样做的目的是什么? 我无法理解它。
编辑:
在理解这与 NULL 相同之后——我认为他们使用它来跳过包括 stdlib。
(void*)0
是 null 指针,又名NULL
(实际上是在几个 header 文件中定义的宏,例如) stddef.h
或stdio.h
基本相同的东西(void*)0
h)
更新:
如何解释 null 指针及其用处? 基本上,它是一个特殊值,表示“此指针未指向任何位置”或“此指针未设置为有效的 object 引用”。
历史记录:据说托尼·霍尔在 1965 年发明了 null 参考文献,众所周知,他对这项发明感到遗憾,因此称其为“十亿美元的错误” :
无论何时使用指针,都必须确保永远不要取消引用 null 指针(因为它没有根据定义引用任何内容)。 如果你仍然这样做,至少你会得到异常的程序终止、一般的保护错误或意外的程序行为。
好吧,我还没有遇到任何 C++ 编译器说NULL
或0
不能转换为void*
(或 to/from int*
,例如)。 但是可能有一些智能编译器或静态分析工具会报告0 to void-pointer
转换作为警告。
该语句通常在回调实现(如线程例程)中找到,它必须遵守所要求的回调原型( pthread_create
, CreateThread
等)。 因此,当您实现 function 时,您必须返回所需的相同类型。 对于pthread_create
例程,您必须返回一个void*
- 这就是为什么return (void*)0;
在那儿。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.