关于g++和gcc的相同点和区别详解
相同点
- g++和gcc都是GNU Compiler Collection的组成部分,是一套集成了多种编程语言的编译器。
- g++和gcc都支持多种CPU架构,包括x86,ARM和PowerPC等。
- g++和gcc都可以编译多种编程语言,包括C,C++,Objective-C,Fortran等。
区别
- g++与gcc最大的区别是,g++支持C++语言编译,而gcc不支持C++语言编译。g++支持C++语言编译主要是因为它支持C++独有的特性,例如类和模板等。
- g++编译C++程序时,默认会链接C++标准库,而gcc编译C++程序时,需要手动链接C++标准库(例如使用参数“-lstdc++”)。
- g++和gcc编译C程序时,默认行为不同。g++编译C程序时,会自动将其视为C++程序,而gcc编译C程序时,不会将其视为C++程序。
- g++比gcc对C++标准的支持更好。这意味着g++能够编译更多的现代C++代码。
示例说明
示例1:编译C++程序
编写下面的C++程序,并将其保存为hello.cpp
:
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
使用g++进行编译:
g++ hello.cpp -o hello
使用gcc进行编译:
gcc hello.cpp -o hello
使用gcc编译会得到以下错误:
hello.cpp: In function ‘int main()’:
hello.cpp:4:5: error: ‘cout’ was not declared in this scope
cout << "Hello, world!" << endl;
^~~~
hello.cpp:4:5: note: suggested alternative: ‘put’
cout << "Hello, world!" << endl;
^~~~
put
hello.cpp:4:26: error: ‘endl’ was not declared in this scope
cout << "Hello, world!" << endl;
^~~~
hello.cpp:4:26: note: suggested alternative: ‘gets’
cout << "Hello, world!" << endl;
^~~~
gets
这是因为gcc不支持C++的标准库,因此需要手动链接C++标准库。
修改命令为:
gcc hello.cpp -o hello -lstdc++
示例2:编译C程序
编写下面的C程序,并将其保存为hello.c
:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
使用g++进行编译:
g++ hello.c -o hello
使用gcc进行编译:
gcc hello.c -o hello
两者都能够正确编译,并生成可执行文件hello
。但是使用g++编译C程序时会看到以下警告信息:
hello.c: In function ‘int main()’:
hello.c:4:5: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type]
return 0;
^~~~~~
这是因为g++默认将C程序视为C++程序,而C和C++的返回值语义不同,因此在使用g++编译C程序时需要将C程序视为C程序。在编译时,可以使用参数“-x c”(或“-std=c99”)告诉g++将代码视为C程序:
g++ hello.c -o hello -x c
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于g++和gcc的相同点和区别详解 - Python技术站