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



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

最佳答案

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

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

也就是说,C++不像C那样提供对void *的隐式转换。

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

  • 您不需要使用C++编译器来编译C代码。
  • 您错过了C++的最佳功能。
  • 您错过了C.
  • 的最佳功能


    人们尝试使用C++编译器编译C代码的唯一原因是他们期望在C++项目中使用其C代码。但是,这是不必要的,因为您通常可以使用C编译器来编译C代码,使用C++编译器来编译C++代码,然后将两者链接在一起。例如:
    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语言中,如link you provided所述,显式转换void *总是一个坏主意。那些专门用C编程的人会畏缩不必要的样板,这些样板可能会引入错误。

    关于c++ - 如何在Xcode中构建没有calloc转换结果的程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33772456/

    10-10 00:25
    查看更多