gcc编译器与g++编译器的区别

本文详细解析了gcc与g++编译器在处理C和C++源代码过程中的异同,包括预处理、编译、汇编和链接阶段的工作原理。重点介绍了g++如何处理C++特有的库文件链接,以及externC在跨语言调用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        gcc与g++编译器的程序文件分别为:/usr/bin/g++和/usr/bin/gcc。

        gcc 和 GCC 是两个不同的东西,GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc是GCC中的GUN C Compiler(C 编译器);g++是GCC中的GUN C++ Compiler(C++编译器)。

        首先需要强调一点,gcc与g++都可以编译C和C++源程序,对于.c文件gcc当做c语言处理,g++当做c++处理;对于.cpp文件gcc和g++均当做c++处理。C++是C的超集,但是两者对语法的要求标准是不一样的,C++对语法的要求更加严格一些,更加规则。

       在预处理阶段,gcc与g++对.c和.cpp产生的效果是一样的,即该阶段两者都可以正常进行。

       在编译阶段,g++实质上是调用的是gcc,因此在编译阶段两者是一样的,但是gcc程序不能自动将c++程序使用的库文件进行链接。在此阶段虽然不需要对库文件进行链接,但是同样需要识别C++使用的库文件,从而对库文件进行申明,因此gcc在编译阶段直接编译C++程序会报错。而g++可以成功编译生成汇编语言代码。

        在汇编阶段,都是利用as程序将汇编语言代码.s译为机器代码.o,因此也完全一样。

        在链接阶段,gcc无法将C++程序生成的.o文件转化为可执行程序,因为gcc程序不能自动将c++程序使用的库文件进行链接,而g++可以正常进行。

        因此,gcc与g++在执行C程序的过程中所做工作是一样的(g++调用了gcc来完成各项工作),都可以正常运行。gcc和g++的区别主要是在对cpp文件的编译和链接过程中,因为cpp和c文件中库文件的命名方式不同,g++既可以编译C又可以编译C++是因为g++在内部做了处理,默认编译C++程序,但如果遇到C程序,它会直接调用gcc去编译。

        extern "C"对于gcc和g++的效果是一样的。extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。

        但是为了能够是gcc能正常完成C++的编译,需要在编译和链接阶段采用- lstdc++参数,其余操作不变。g++的使用完全同gcc,只是不需要加- lstdc++参数,如: g++ -E hello.c -o hello.i    g++ hello.cpp -o hello       gcc -S -lstdc++ hello.ii -o hello.s(hello.ii是hello.cpp经过预处理产生的)     gcc -lstdc++ hello.cpp -o hello  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值