【问题标题】:Do I cast the result of mkl_malloc?我要转换 mkl_malloc 的结果吗?
【发布时间】:2015-08-18 10:30:04
【问题描述】:

当然我知道我们不会转换malloc()的结果,但是mkl_malloc()呢?

这里是prototypevoid* mkl_malloc (size_t alloc_size, int alignment);

malloc()具有相同的返回类型,如您所见:void* malloc (size_t size);

因此,我不会为这些reasons 转换结果。但是英特尔的人会这样做,正如你看到的here,这让我担心我错过了什么。

有人知道吗?

【问题讨论】:

  • 不,在 C 中你不需要转换 anything 返回void *。所有指针都可以隐式转换为void *
  • 正是@JoachimPileborg,但我想知道英特尔人是否有其他意图!这就是我问的原因,我认为得到答案会很好,因为我搜索并没有找到任何东西。
  • 如果您检查mkl_malloc 的原型,您会发现它有一些额外的参数,对吧?这意味着它更多不仅仅是分配一块内存。而void * 就是void *,无论何时何地。
  • 有很多代码都有多余的演员表,但我认为这不能证明什么。人们有习惯(例如,他们在使用另一种语言(如 C++)编程时养成的习惯)。有时这些习惯很糟糕,有时非常糟糕。 Cast 就是其中之一,除了非常具体的边缘用例之外,好的 C 代码根本没有强制转换。
  • d'accord @JensGustedt,这就是我的想法,C++ 确实以某种方式影响了这个例子,我认为你的评论与 Joachim 的结合可以作为答案。

标签: c memory-management casting malloc intel-mkl


【解决方案1】:

投射结果是多余的,没有多大意义,因此你不应该这样做。但这不是超级重要的,这是一件小事。

整个“强制转换 malloc 的结果”的争论在 Stack Overflow 上已经不成比例了,最有道理的担忧是为什么 16 年前隐式 int 从 C 语言中删除时你不应该过时。

【讨论】:

  • 答案中的“隐式 int”是否意味着在 C99 之前编译器假定 malloc() 在不包含“stdlib.h”以提供原型时返回一个 int?
  • @Eli4ph 事实上,在古代编译器上,忘记 stdlib.h 并结合转换 malloc 的结果是很危险的。这就是引发整个辩论的原因。但是不应该使用这样的旧编译器——如果它们是那么主要的问题应该是“我为什么要使用石器时代的编译器”而不是“我为什么要转换 malloc 的结果”。
猜你喜欢
  • 2021-03-31
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2014-08-26
  • 1970-01-01
相关资源
最近更新 更多