我使用GNU编译器在CentOs8下编译此代码:
#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 ++代码。我相信使用gcc
或g++
应该有所作为,但似乎编译器仅考虑文件扩展名。
您能提供一些细节吗?
C ++在从void*
返回malloc()
到的隐式强制转换时会出错int*
。而C允许从隐式强制转换void*
为其他指针类型。
大多数编译器将默认查看文件扩展名以确定要编译的语言。
Aman gcc
显示所有.c
文件默认都被编译为C
。而所有.cc
,.cp
,.cxx
,.cpp
,.CPP
,.c++
,和.C
(大写C)文件编译为C++
。
您可以通过-x
gcc / g ++选项覆盖此行为,以强制使用该语言。
例子:
gcc -x c++ foo.c -c // compiles foo.c as C++ instead of C
在大多数Unix系统上,gcc和g ++通常是相同的二进制文件。它只是默认使用不同的行为,具体取决于其自身的argv[0]
参数。
显式使用g ++和gcc与-x
选项之间可能存在其他行为差异。我不确定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句