全教育培训行业第三方平台平台就业机构
扫码试听
扫码试听
Q:2638333071
首页 > 零基础学习 > Web前端 > > gcc和g++的区别(gcc和gcc)
行业动态 行业问答 课程问答 零基础学习 就业前景 技术干货

gcc和g++的区别(gcc和gcc)

发布时间:4 周 前 栏目:Web前端 浏览:

1、gcc和g++的区别

误区一: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的超集,但是两者对语法的要求是有区别的,例如:

如果按照C的语法规则,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:“printString未定义”;

分别对应前面红色标注的部分。可见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++方式命名。试验如下:

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

.globl _Z9CppPrintfv //注意此函数的命名

.globl _Z9CppPrintfv //注意此函数的命名

完全相同!

2. 去掉me.h中extern "C",看用gcc和g++命名有什么不同

.globl _Z9CppPrintfv //注意此函数的命名

.globl _Z9CppPrintfv //注意此函数的命名

完全相同!

【结论】完全相同,可见extern "C"与采用gcc/g++并无关系,以上的试验还间接的印证了前面的说法:在编译阶段,g++是调用gcc的。

gcc和g++的区别

2、GCCG++与VC有何语法区别

GCC,G++与VC的语法有何区别呢?不要说明文档要分条罗列,如果是自己打的立即给500,决不食言!

gcc和g++的区别

3、gcc与g++的区别 有哪些

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的超集,但是两者对语法的要求是有区别的。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的超集,但是两者对语法的要求是有区别的,例如:

如果按照C的语法规则,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:“printString未定义”;

分别对应前面红色标注的部分。可见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 方式命名。试验如下:

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

.globl _Z9CppPrintfv //注意此函数的命名

.globl _Z9CppPrintfv //注意此函数的命名

完全相同!

2. 去掉me.h中extern "C",看用gcc和g 命名有什么不同

.globl _Z9CppPrintfv //注意此函数的命名

.globl _Z9CppPrintfv //注意此函数的命名

4、Linux下gccg++,make和cmake的区别

gcc是一个C语言编译器,g++是一个C++语言的编译器,这是它们的主要区别,虽然说gcc也可以编译C++代码文件,但实际上是需要g++支持的,gcc编译C++时是要调用g++的。

make是根据Makefile中定义的编译规则来对多个源文件执行编译命令,也就是说它是管理编译规则的工具,并不实际编译文件;而cmake则是可以生成Makefile文件的一个工具,实际上,cmake工具不仅可以生成Makefile,还可以生成Windows平台的VS等开发工具的dsp等工程文件,这样管理项目就更方便了。

上一篇:没有了
技术干货
零基础学习
行业多年深耕,从这报名,学费立减800
  • 岳同学180****1241刚刚成功领取
  • 胡同学134****6431刚刚成功领取
  • 李同学150****6122刚刚成功领取
  • 张同学136****2231刚刚成功领取
  • 孙同学178****5521刚刚成功领取
  • 齐同学156****7788刚刚成功领取
猜你喜欢
查看更多
相关推荐
查看更多
现在学习,我的薪资能达到多少?
立即报名

联系我们:

Q:2638333071

鄂ICP备2023015464号