天嵌 ARM开发社区

 找回密码
 注册
查看: 2614|回复: 6

arm-linux-gcc和arm-linux-g++区别大吗?

[复制链接]
lbn321 发表于 2014-2-25 15:40:47 | 显示全部楼层 |阅读模式
arm-linux-gcc和arm-linux-g++区别大吗?

TQ-lkp 发表于 2014-2-25 16:14:34 | 显示全部楼层
gcc 是编绎c代码的
g++是编绎cpp代码的
 楼主| lbn321 发表于 2014-2-25 16:24:49 | 显示全部楼层
好像gcc也能编译c++,不过它会做判断
而g++则是无论c还是c++都当成cpp文件来编译的,是这样吗
TQ-lkp 发表于 2014-2-25 16:30:59 | 显示全部楼层
更详细就上网找下资料了,顺便跟大家分享下
 楼主| lbn321 发表于 2014-2-25 16:40:07 | 显示全部楼层
gcc和g++都是GNU的一个编译器;
这两者的区别:
1.从源文件上看,对于文件后缀(扩展名)为.c的test.c文件,gcc会把它看成是C程序,而g++则会把它看成是C++程序;而对于文件后缀(扩展名)为.cpp的test.cpp文件,gcc和g++都会把它看成是C++程序;注意:虽然C++是C的超集,但是两者在语法要求上还是有区别的,C++的语法要求更严谨一些;
2.从编译器角度看,在编译阶段,g++会自动调用gcc,对于编译C++代码,两者是等价的,但是由于gcc不会自动调用C++程序所使用的库进行链接,所以需要使用g++来编译或者是在gcc的命令行加上对C++库的链接-lstdc++;
3.gcc和g++对宏__cplusplus的处理:实际上这个宏是标志着编译器将会把代码按照C的语法来解释还是按照C++的语法来编译,如上所述,如果源文件的扩展名是.c,并且使用gcc编译,那么宏__cplusplus将是未定义的,否则,就是已定义的;
4.extern "C"的功能就就是把它所界定的那些函数按照C语言的语法和规则来编译;这是一个函数调用约定;
5.使用extern "C"与使用gcc和g++并没有关系;因为extern "C"只是用来约束代码按照C语言的语法要求和规则来编译;无论是gcc还是g++,使用extern "C"来约束的时候,都是以C语言的命名方式来为symbol命名的,否则,都是以C++语言的命名方式来为symbol命名的;

实验一:test.cpp
……
都报这样的错误;
因为源文件的扩展名是.cpp,所以,gcc和g++编译器都把test.cpp当做是C++程序;

把test.cpp重命名为test.c;
先用g++编译:
-bash-3.00$ g++ -o test test.c
test.c: In function `int main(int, char**)':
test.c:7: error: return-statement with no value, in function returning 'int'
test.c:8: error: `printString' was not declared in this scope
test.c:10: error: return-statement with no value, in function returning 'int'
仍然抱这样的错误:因为g++把test.c看成是C++程序,依照C++语言的语法要求来编译;
再用gcc编译:
-bash-3.00$ gcc -o test test.c
-bash-3.00$
没有报错:因为gcc把test.c看成是C程序,依照C语言的语法要求来编译;
结论:
这两次实验充分说明,A:对于一个扩展名为.c的代码,gcc会把它看成是C程序,依照C语言的语法要求来编译,而g++会把它看成C++程序,并依照C++语言的语法要求来编译;而对于一个扩展名为.cpp的代码,gcc和g++都会把他看成C++程序,按照C++的语法要求来编译;B:C++语言的语法要求比C语言的语法要求更严谨;

实验二:extern "C"与使用gcc/g++的关系(没有任何关系):
……
使用gcc与使用g++完全相同;
结论:
A.使用extern "C"与使用编译器gcc还是g++没有关系;extern "C"的使用只是约定代码按照C语言的语法要求来编译;extern "C"的使用独立于编译器的选择;换句话说,无论使用gcc还是g++,如果使用extern "C"来约定函数调用,则以C语言命名规则来命名;如果不使用extern "C"来约定函数调用,则以C++语言的命名规则来命名;
B.在编译阶段,g++是要调用gcc的;


摘自http://www.douban.com/note/267704604/
 楼主| lbn321 发表于 2014-2-25 16:43:06 | 显示全部楼层
TQ-lkp 发表于 2014-2-25 16:30
更详细就上网找下资料了,顺便跟大家分享下

lkq,问你个问题,你觉得假如我做一个系统,其中要有DSP处理图像等数据的,其中还要用到这个ARM,这个ARM主要充当的是什么功能?
wangsukun2009 发表于 2014-8-7 15:57:35 | 显示全部楼层
lbn321 发表于 2014-2-25 16:43
lkq,问你个问题,你觉得假如我做一个系统,其中要有DSP处理图像等数据的,其中还要用到这个ARM,这个ARM ...

我感觉主要是进行任务管理,因为这正是操作系统所擅长的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 07:21 , Processed in 1.033243 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表