如何在 Xcode 中构建没有 calloc 转换结果的程序?

How to build program without cast result of calloc in Xcode?

我正在尝试在我的程序中使用 calloc。通过显式转换,它可以编译并运行良好,但是当我尝试 remove the explicit cast of malloc 时,我看到以下错误:

Assigning to '... *' (aka '....... *') from incompatible type 'void *'

如何在不在 Xcode 中显式转换 calloc 的情况下编译我的代码?

您正在尝试将 C 代码编译为 C++。

虽然某些 C 代码在 C++ 中也有效,但您遇到了一个在 C++ 中无效的 C 代码示例。

也就是说,C++ 不提供 C 提供的隐式转换 to/from void *


出于以下三个原因,您应该始终使用 C 编译器 编译 C 代码:

  • 您不需要使用 C++ 编译器编译 C 代码。
  • 您错过了 C++ 的最佳部分。
  • 您错过了 C 的最佳部分。

人们尝试使用 C++ 编译器编译 C 代码的唯一原因是他们希望在 C++ 项目中使用他们的 C 代码。然而,这是不必要的,因为您通常可以使用 C 编译器编译 C 代码,使用 C++ 编译器编译 C++ 代码,然后 link 将两者结合在一起。例如:

gcc -c c_code.c
g++ -c cpp_code.cpp
gcc cpp_library.o c_library.o

In C++, it is generally a bad idea to use *alloc functions。那些专门用 C++ 编程的人通常会畏缩 *alloc 使用。


在 C 中,显式转换 void * 总是一个坏主意,正如 link you provided 所解释的那样。那些专门用 C 语言编程的人会对可能引入错误的不必要的样板感到畏缩。