gpt4 book ai didi

c++ - 为什么文件扩展名对编译有影响?

转载 作者:行者123 更新时间:2023-12-05 09:34:41 25 4
gpt4 key购买 nike

我在 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++ 代码。我相信使用 gccg++ 应该有所不同,但编译器似乎只考虑文件扩展名。

能否提供一些详细信息?

最佳答案

C++ 会在您从 malloc() 返回的 void*int* 的隐式转换中出错。而 C 允许从 void* 到其他指针类型的隐式转换。

大多数编译器将默认查看文件扩展名以确定要编译成的语言。

man gcc 显示所有 .c 文件默认编译为 C。而所有 .cc.cp.cxx.cpp.CPP.c++.C(大写 C)文件被编译为 C++

您可以通过 gcc/g++ 的 -x 选项强制语言覆盖此行为。

例子:

 gcc -x c++ foo.c -c   // compiles foo.c as C++ instead of C

gcc 和 g++ 在大多数 unix 系统上通常是相同的二进制文件。它只是默认为不同的行为,具体取决于它自己的 argv[0] 参数。

显式使用 g++ 和 gcc 与 -x 选项之间可能存在其他行为差异。我不确定。

关于c++ - 为什么文件扩展名对编译有影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66396120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com