【发布时间】:2021-02-27 06:15:09
【问题描述】:
我在 CentOs8 下使用 GNU 编译器编译这段代码:
#include <stdlib.h>
int main() {
int *a = malloc(3 * sizeof(int));
return 0;
}
当我将它命名为 a.cpp 时,两个编译命令都失败了:
g++ -o a a.cpp
gcc -o a a.cpp
但是我把它重命名为a.c之后,这个编译命令就成功了:
gcc -o a a.c
这是 C 代码,不是 C++ 代码。我相信使用gcc 或g++ 应该会有所不同,但编译器似乎只考虑文件扩展名。
您能否提供一些关于此的详细信息?
【问题讨论】:
-
在 C++ 中,您必须转换
malloc的结果,因为 C++ 不允许与void *进行隐式转换。试试int* a = (int*) malloc(3*sizeof(int)); -
另外,
<stdlib.h>是一个 C 头文件。在 C++ 中,它是<cstdlib>。 -
@mediocrevegetable1
malloc()根本不应该在 C++ 中使用,而是使用new。 -
@RemyLebeau 我知道这一点,但 OP 已明确声明“这是 C 代码,而不是 C++ 代码。”所以我认为这主要是 C 代码,也可能在一些 C++ 文件中使用。
-
@mediocrevegetable1 -- C++ 中允许隐式转换到
void*。