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

我在 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

但是在我将其重命名为ac 后,此编译命令成功:

gcc -o a a.c

这是 C 代码,而不是 C++ 代码。我相信使用gccg++应该有所作为,但似乎编译器只考虑文件扩展名。

你能提供一些关于这方面的细节吗?

回答

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

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

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

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

例子:

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

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

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


以上是为什么文件扩展名对编译有影响?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>