C++ g++;那么gcc呢?
g++和gcc之间的区别是什么?其中哪一个应该用于一般C++开发? < P>代码> GCC < /C>和C++ g++;那么gcc呢?,c++,gcc,g++,C++,Gcc,G++,g++和gcc之间的区别是什么?其中哪一个应该用于一般C++开发? < P>代码> GCC < /C>和 G++< /Cord>是GNU编译器集合的编译器驱动程序(Gnu编译器集合(它曾经是GNUC编译器)。 即使它们根据文件类型自动确定要调用哪些后端(cc1cc1plus..),除非使用-x语言重写,否则它们也存在一些差异 默认设置中最重要的区别可能是它们自动链接到哪些库 根据GCC的在线文档和,g++相当于GCC-xc++-lstdc++-shared libgcc(第一个是编译器选项,第二
cc1
cc1plus
..),除非使用-x语言
重写,否则它们也存在一些差异
默认设置中最重要的区别可能是它们自动链接到哪些库
根据GCC的在线文档和,
g++
相当于GCC-xc++-lstdc++-shared libgcc
(第一个是编译器选项,第二个是链接器选项)。这可以通过使用简而言之:如果使用G++,前端将告诉链接器,您可能希望与C++标准库链接。gcc前端不会这样做(如果您传递正确的命令行选项,它也可以与它们链接) 一个显著的区别是,如果将
.c
文件传递给gcc,它将编译为c
<> P+>默认的G++行为是对待C++,C~(/Cuth.>)文件作为C++(除非<代码> -x c>代码>。< /P> < P>尽管GCC和G+命令做了非常类似的事情,但是G++被设计为调用C++程序的命令;它的目的是自动做正确的事情
在幕后,他们其实是同一个节目。据我所知,这两个都决定是否根据文件扩展名编译C或C++程序。两者都可以链接到C++标准库,但默认情况下只有G++才这样做。因此,如果你有一个C++程序,不需要链接到标准库,GCC会碰巧做正确的事情。但是,g++也是如此。所以没有理由不使用G++来进行一般的C++开发。
- 引用GNU编译器支持的所有不同语言
gcc
:GNU C编译器<代码> g++< /> >:GNU C++编译器
主要区别是:
<>代码> GCC < /Calp>将编译:<代码> *.c*.CPP< /C>文件,分别为C和C++。 <代码> G+++ <代码>将编译:<代码> *.c*.CPP< /Cord>文件,但它们都将被视为C++文件。gcc
编译C文件时预定义的宏更少gcc
编译*.cpp
和g++
编译*.c\*.cpp
文件有一些额外的宏*.cpp
文件时的额外宏:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
“GCC”是GNU编译器集合的常用速记词。这既是编译器最通用的名称,也是强调编译C程序时使用的名称(以前的缩写是“GNUC编译器”)
在引用C++编译时,通常调用编译器“g++”。因为只有一个编译器,所以无论语言环境如何,将其称为“GCC”都是准确的;然而,当强调编译C++程序时,“G++”一词更有用。
您可以阅读更多内容。gcc和g++都是GNU编译器。他们都编译C和C++。不同之处在于*.c文件gcc将其视为c程序,而g++将其视为c++程序。*。cpp文件被认为是c++程序。C++是C的一个超级集合,语法更严格,所以要注意后缀。 < P> <强>我对这个问题感兴趣,并进行了一些实验<强/< /P>
$ g++ --version | head -n1
g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
$ gcc --version | head -n1
gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
gcc -std=c99 test_c99.c
gcc -std=c89 test_c89.c
g++ -std=c++98 test_cpp.cpp
gcc -std=c++98 test_cpp.cpp
$ gcc -std=c++98 test_cpp.c
cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
$ gcc -x c++ -std=c++98 test_cpp.c
$ g++ -std=c++0x test_cpp_11.cpp
$ cat test_c89.c test_c99.c test_cpp.cpp
// C89 compatible file
int main()
{
int x[] = {0, 2};
return sizeof(x);
}
// C99 compatible file
int main()
{
int x[] = {[1]=2};
return sizeof(x);
}
// C++1998,2003 compatible file
class X{};
int main()
{
X x;
return sizeof(x);
}
// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
std::vector<int> a {1,2,3}; // bracket initialization
return 0;
}
$cat test\u c89.c test\u c99.c test\u cpp.cpp
//C89兼容文件
int main()
{
int x[]={0,2};
返回大小f(x);
}
//C99兼容文件
int main()
{
int x[]={[1]=2};
返回大小f(x);
}
//C++19982003兼容文件
类X{};
int main()
{
X;
返回大小f(x);
}
//C++11
#包括
枚举类颜色:int{red,green,blue};//作用域枚举
int main()
{
std::vector a{1,2,3};//括号初始化
返回0;
}
调查结果:
g++和gcc之间有什么区别?
gcc
已从单一语言的“GNU C编译器”演变为多语言的“GNU编译器集合”。术语“GNUC编译器”有时仍在C编程环境中使用
<代码> G++< /Cord>是GNU编译器集合的C++编译器。与
gnat
类似,gnat是gcc
的Ada编译器
例如,ubuntu16.04和18.04mang++
命令返回GCC(1)
int main(){
int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}
undefined reference to `operator new(unsigned long)'