编译c代码时如何让g++忽略calloc指针类型错误

Cha*_*Kim 0 c c++ pointers compiler-errors g++

例如,下面的行可以用 gcc 编译,

float *m = calloc(rows*cols, sizeof(float));
Run Code Online (Sandbox Code Playgroud)

但是 g++ 抱怨指针类型不匹配,如下所示。

../../../../../YOLO/darknet/src/gemm.c:33:22:错误:从“void*”到“float*”的无效转换

(也许 callc 在 C++ 中总是返回 void* ?)
我可以让 g++ 忽略这个指针类型不匹配错误吗?(我找到了这个链接,但他们说这是不可避免的。如果我们可以在 C++ 代码中使用 C 代码而无需在任何地方修复它,那就太好了。)

eer*_*ika 6

(也许 callc 在 C++ 中总是返回 void* ?)

是的。calloc总是返回void*。在 C 和 C++ 中。

我可以让 g++ 忽略这个指针类型不匹配错误吗?

我建议不要尝试让编译器忽略该错误,而是修复程序。你可以像这样修复它:

float *m = static_cast<float*>(std::calloc(rows*cols, sizeof(float)));
Run Code Online (Sandbox Code Playgroud)

或者,如果翻译单元是用 C 编写的,则用 C 编译器编译它。

如果我们可以在 c++ 中使用 c 代码

解决方案:不要在另一种语言中使用一种语言。用 C 写 C,用 C++ 写 C++。通过将翻译单元链接在一起,语言之间的交互是可能的。