我正在读一本使用C语言的书(Butenhof,1997年出版的Programming with POSIX Threads本),我遇到了以下几行:

(void)free(data);

这里,data只是一个指向已分配 struct 的指针,

data = malloc(sizeof(my_struct_t));

为什么free的结果是void

从我对C的理解来看,这似乎没有意义,原因有两个:

  • free函数已经返回void
  • 代码没有使用返回值(它甚至没有被赋值给变量)

这本书是1997年写的.这是什么遗产吗?

作者提到这些示例是在Digital Unix4.0d上运行的,但是如果您不打算使用某个函数的结果,我仍然无法想象有什么理由对该结果进行强制转换.

推荐答案

如果我们谈论的是标准的free函数,那么它的原型是

void free(void *ptr);

因此,演员阵容是完全无用的

作者可能忘了包括声明此原型的stdlib.h头,因此编译器假定它的返回类型为int.现在,在静电分析这段代码的过程中,编译器警告它认为不是void时的函数有未使用的返回值.这样的警告通常通过将演员添加到void来使其静音.

C++相关问答推荐

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

为什么输出不是从上到下C

增加getaddrinfo返回的IP地址数量

使用GOTO从多个嵌套循环C继续

如何使用低级C++写出数值

如果我释放其他内容,返回值就会出错

如何识别Linux中USB集线器(根)和连接到集线器(根设备)的设备(子设备)?

对重叠字符串使用MemMove

如何在C-函数中混合使用C代码和ASM?

处理来自浏览器的HTTP请求

运行时错误:在索引数组时加载类型为';char';`的空指针

C:如何将此代码转换为与数组一起使用?

具有正确标头的C struct 定义问题

如何逐位读取二进制文件?

将某些内容添加到链接列表时,列表中的其他项将使用最后添加的项的名称

解密Chrome加密密钥

从管道读取数据时丢失

strlen 可以是[[未排序]]吗?

如何从文件中读取一长串数据?

C 有没有办法比较多个字符串? [我通过fgets()输入它们]