gcc和g++区别

gcc与g++编译链接库文件兼容性 使用静态库的时候,gcc编译出来的静态链接库g++编译代码的时候有时候链接不了,而g++编译的静态链接库gcc在编译的时候有时候也使用不了。 下面举例说明: 编写库文件: hello.h #ifndef HELLO_H_ #define HELLO_H_ #include void HelloFunc(); #endif /*HELLO_H_*/ hello.c #inclu 阅读详情
误区一:gcc只能编译c代码,g++只能编译c++代码
两者都可以,但是请注意:
1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

误区二:gcc不会定义__cplusplus宏,而g++会
实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。

误区三:编译只能用gcc,链接只能用g++
严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
gcc和g++的区别

我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。 
误区一:gcc只能编译c代码,g++只能编译c++代码

两者都可以,但是请注意:
1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的,例如:
#include <stdio.h>
int main(int argc, char* argv[]) {
   if(argv == 0) return;
   printString( argv);
    return;
}
int printString(char* string) {
  sprintf(string, "This is a test.\n");
}

如果按照C的语法规则,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:“printString未定义”;
“cannot convert `char**' to `char*”;
”return-statement with no value“;
分别对应前面红色标注的部分。可见C++的语法规则更加严谨一些。
2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

误区二:gcc不会定义__cplusplus宏,而g++会

实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。

误区三:编译只能用gcc,链接只能用g++
严格来说,这句话不算错误,但是它混淆了概念, 应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。

误区四:extern "C"与gcc/g++有关系

实际上并无关系,无论是gcc还是g++,用extern "c"时,都是以C的命名方式来为symbol命名,否则,都以c++方式命名。试验如下:
me.h:
extern "C" void CppPrintf(void);

me.cpp:
#include <iostream>
#include "me.h"
using namespace std;
void CppPrintf(void)
{
     cout << "Hello\n";
}

test.cpp:
#include <stdlib.h>
#include <stdio.h>
#include "me.h"        
int main(void)
{
    CppPrintf();
    return 0;
}

1. 先给me.h加上extern "C",看用gcc和g++命名有什么不同

[root@root G++]# g++ -S me.cpp
[root@root G++]# less me.s
.globl _Z9CppPrintfv        //注意此函数的命名
        .type   CppPrintf, @function
[root@root GCC]# gcc -S me.cpp
[root@root GCC]# less me.s
.globl _Z9CppPrintfv        //注意此函数的命名
        .type   CppPrintf, @function
完全相同!
               
2. 去掉me.h中extern "C",看用gcc和g++命名有什么不同
[root@root GCC]# gcc -S me.cpp
[root@root GCC]# less me.s
.globl _Z9CppPrintfv        //注意此函数的命名
        .type   _Z9CppPrintfv, @function
[root@root G++]# g++ -S me.cpp
[root@root G++]# less me.s
.globl _Z9CppPrintfv        //注意此函数的命名
        .type   _Z9CppPrintfv, @function
完全相同!
【结论】完全相同,可见extern "C"与采用gcc/g++并无关系,以上的试验还间接的印证了前面的说法:在编译阶段,g++是调用gcc的。
GCC和G++有什么区别?c++和g++程序的区别?GCC只能编译C语言吗?gcc 1.cpp和g++ 1.cpp有什么区别? gcc命令不止能编译C语言,还可以编译C++(内部等同于调用g++)或Fortran等(编译其它语言相当于调用对应语言的编译器),g++只能编译C或者C++.如果仅仅考虑C语言,参考此公式:g++ == gcc -xc++ -lstdc++ -shared-libgcc. 阅读详情

相关推荐

gcc和g++的区别

gcc和g++都是GNU(组织)的一个编译器。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因

acexuyy的专栏 595

ElementUI时间选择器(el-date-picker)输入格式的智能转换与动态适配

本文深入探讨了ElementUI时间选择器(el-date-picker)在处理用户自由格式输入时的痛点,并提出了基于Vue自定义指令的智能转换解决方案。该方案通过核心解析函数自动识别如“20231225”等连续数字输入,将其动态转换为标准时间格式,并确保与表单验证兼容,有效提升了后台管理系统的输入效率和用户体验。

weixin_29016833的博客 293

【C语言入门必备】--内含编译器的对比,手把手教您写代码

您好!本篇将为您简单的介绍C语言的常见概念(入门必备),以及新手该如何选择编译器方面的相关知识,并手把手带您创建项目、写代码,希望您会喜欢。

2301_81647724的博客 2311

大众点评爬虫实战:如何用Python绕过反爬机制获取评论数据(附完整代码)

本文深入探讨了2024年使用Python进行大众点评数据采集的实战策略。文章详细解析了现代反爬机制的核心逻辑,并提供了从构建拟人化请求会话、应对动态内容与接口加密,到工程化实践(代理调度、状态持久化)的完整解决方案与代码示例,旨在帮助数据分析师稳健获取评论数据,用于后续的文本挖掘与商业洞察。

weixin_29084111的博客 1920

华为eNSP Pro实战:NE/CE设备SSH远程配置避坑指南

本文针对华为eNSP Pro用户在模拟多台NE路由器或CE交换机时遇到的浏览器卡顿问题,提供了详细的SSH远程配置避坑指南。通过对比浏览器与SSH客户端的资源占用和操作体验,文章详细阐述了为NE和CE设备配置SSH服务的关键步骤、命令差异及常见错误排查方法,旨在帮助用户提升实验效率,实现稳定高效的远程管理。

weixin_29196891的博客 223

gcc与g++的区别

一、编译的四个阶段 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件    编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件    汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件    连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件 在我们理解了上述四个...

我的梦 2万+

精确时钟同步协议ptp/IEEE-1588v2协议-------(1)简介

ptp, 1588V2, IEEE-1588, 精确时钟同步协议

meihualing的专栏 5357

Gcc 与 G++的区别(通俗易懂)

误区一: gcc只能编译c代码, g++只能编译c++代码;两者都可以;(1)后缀为.c的, gcc 把它当作是 c程序,而g++当作是 c++程序; (2)后缀为.cpp 的,两者都会认为是C++程序,c++的语法规则更加严谨一些编译阶段, g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和c++程序使用的库联接,所以通常用g++来完成链接, 为了统一起见,干脆编译/链接统统用g++ 了,这就给人―种错觉,好像cpp程序只能用g++似的;误区二: gcc不会定义__cplusp

热爱数据库的小胖 1万+

从DeepMimic到虚拟偶像:用动作捕捉数据训练AI跳舞的完整流程(附Blender插件配置)

本文详细介绍了如何利用DeepMimic的深度强化学习框架,将动作捕捉数据转化为虚拟偶像或游戏角色的舞蹈动作。从核心的模仿学习理念、PyBullet环境搭建、策略网络与奖励函数设计,到数据处理、训练技巧(如参考状态初始化),最后讲解了如何将训练好的AI模型集成到Blender和Unity等工具中,实现从数据到实时驱动角色的完整流程。

weixin_29054399的博客 504

计算机毕设项目十四:美团酒店评论情感分析完整数据代码-可直接运行

计算机毕设项目十四:美团酒店评论情感分析完整数据代码-可直接运行

693

gcc与g++的区别_gcc和g++的区别

实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。gcc在编译.c文件时,可使用的预定义宏是比较少的,很多都是未定义的。因此,我们总是会看到如下格式的代码(功能是对编译器提示使用C的方式来处理函数):其中,__cplusplus是c++定义的宏,如果gcc在编译cpp文件时、g++在编译c文件和cpp文件时,extern c声明会有效。如果是gcc在编译.c文件时,那么,extern c声明无效。

2401_89213203的博客 1152

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。

jasonj333 1160

GCC的gcc和g++区别

来源:http://www.cnblogs.com/samewang/p/4774180.html 看的Linux公社的一篇文章,觉得不错,内容复制过来了。 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g++的区别。 先描述一下今天遇到的错误: 因为以前写程序的时候,写的都是cpp文件,然后就直接...

huhuandk的博客 308

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 660

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

gcc 与 g++的区别

转载自:http://www.cnblogs.com/wb118115/p/5969775.html # gcc 与 g++的区别 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g++的区别。 先描述一下今天遇到的错误: 因为以前写程序的时候,写的都是cpp文件,然后就直接使用g++编译,没出错,也就没有在...

destination00的博客 995

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

gcc g++的区别

是 GNU 编译器套件中的两个重要工具,它们的核心区别在于。强制所有文件按 C++ 处理,无论扩展名。(C++ 编译器),但传递的默认参数不同。自动链接 C++ 标准库,无需额外操作。编译 C++ 时需手动启用这些特性。默认不链接 C++ 标准库(如。两者都是调用 GCC 的。编译 C 代码时不会。

cylar-gg的博客 656

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

gcc和g++有什么区别?

来源| C语言中文网发展至今,GCC 编译器已经更新至 V10 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。除此之外,当下的 GCC 编译器...

嵌入式Linux 932

gcc与g++区别

gcc与g++的区别与联系

zw_whusgg的博客 284

gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器。 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序,用 g++ 指令编译 C++ 代码。需要强调的一点是,这并不是 gcc 和 g++ 的区别,gcc 指令也可以用来编译 C++ 程序,同样 g++ 指令也可以用于编译 C 语言程序。 实际上,只要是 GCC 支持编译的程序代码,都可以使用 gcc 命令完成编译。可以这样理解,gcc 是 GCC 编译器的通用编

wohu1104的专栏 9783

gcc和g++是什么,有什么区别?

关注、星标公众号,不错过精彩内容素材来源:C语言中文网编辑整理:strongerHuang目前(2020-09)GCC 编译器已经更新至 10.2版本,其功能也由最初仅能编译 C 语言,...

strongerHuang 2387

gcc与g++的区别;实际开发中何时使用gcc或g++

0. gcc与g++的共同点 gcc和g++都是GNU的编译器。 1. gcc与g++的区别 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和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是

sally的jerry 1944
上一篇: 获取程序路径并去除程序名
下一篇: opencv2学习笔记2-操作图像(椒盐噪声)
devil_pull
博客等级 码龄15年 12粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值