我要转换malloc的结果吗?

这个问题 ,有人建议意见 ,我应该投的结果malloc ,即 html

int *sieve = malloc(sizeof(int) * length);

而不是: 程序员

int *sieve = (int *) malloc(sizeof(int) * length);

为何会这样呢? 编程


#1楼

强制转换malloc的结果不是强制性的,由于它返回void* ,而且void*能够指向任何数据类型。 编程语言


#2楼

进行强制转换是由于: spa

  • 它使您的代码在C和C ++之间更易于移植 ,而且正如SO经验所代表的那样,许多程序员声称他们其实是在用C ++(或C加本地编译器扩展)编写时才用C编写。
  • 不然, 可能会隐藏一个错误 :请注意全部SO示例,它们混淆了什么时候编写type *type **
  • 它使您没法注意到您未能#include适当的头文件的想法错过了树木的森林 。 就像说“没必要担忧您没有要求编译器抱怨没有看到原型的事实-讨厌的stdlib.h是要记住的真正重要的事情!”
  • 它迫使进行额外的认知交叉检查 。 它将(指定的)所需的类型放在要对该变量的原始大小执行的算术旁边。 我敢打赌,您能够进行SO研究,该研究代表在进行强制转换时, malloc()错误的捕获速度要快得多。 与断言同样,揭示意图的注释会减小错误。
  • 以机器能够检查的方式重复本身一般是个主意。 实际上,这就是一个断言,而对cast的这种使用就是一个断言。 断言仍然是咱们使代码正确的最通用技术,由于Turing早在多年前就提出了这个想法。

#3楼

返回的类型为void *,能够将其强制转换为所需的数据指针类型,以便将其取消引用。 指针


#4楼

如今不须要malloc()返回的值,可是我想补充一点,彷佛没有人指出: code

在古代,也就是在ANSI C提供void *做为指针的通用类型以前, char *是此类用法的类型。 在这种状况下,强制转换能够关闭编译器警告。 htm

参考: C常见问题解答 get


#5楼

这取决于编程语言和编译器。 若是在C中使用malloc ,则无需键入强制转换,由于它将自动键入强制转换。可是,若是您使用C ++,则应键入强制转换,由于malloc将返回void*类型。 原型

相关文章
相关标签/搜索