【问题标题】:Why does the compiler complain when I do not cast the result of malloc?当我不强制转换 malloc 的结果时,为什么编译器会抱怨?
【发布时间】:2012-05-21 01:12:23
【问题描述】:

我正在检查不需要显式转换 malloc 调用结果的代码,但每当我尝试这样做时,编译器都会抛出错误。

char *somevar;
somevar = malloc(sizeof(char) * n); //error
somevar = (char *)malloc(sizeof(char) * n); // ok

【问题讨论】:

  • 你到底遇到了什么错误?

标签: c casting compiler-errors malloc


【解决方案1】:

如果您使用 C++ 编译器而不是 C 编译器,则会发生这种情况。由于 C++ 需要显式转换。 问题不仅在于(取消)转换 malloc 结果,还在于任何指向其他指针的 void 指针。

【讨论】:

  • 好的。这很有意义。由于我使用的框架是用 C 编写的,并且我正在创建一个由外部调用包装的用 C++ 编写的模块,因此我将遵守 C++ 约定,但框架开发人员不会。
  • 通常最好将 C 和 C++ 代码分成不同的模块。 C++ 编译器无法编译 C。
【解决方案2】:

你还记得包含函数原型吗?对于 malloc(3),这是:

#include <stdlib.h>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多