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的;

gcc 和g++区别的更多相关文章

  1. gcc与g++区别;编译选项

    gcc与g++区别:可以相互编译,但是gcc不会自动进行c++的链接 gcc g++编译选项: -E 预处理 -S 编译指定源文件但是不尽兴汇编 -c 编译汇编,但是不进行链接 -o 编译成可执行文件 ...

  2. GCC的gcc和g++区别

    看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g+ ...

  3. GCC和G++区别

    原文:http://www.cnblogs.com/samewang/p/4774180.html 看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一 ...

  4. gcc与g++区别以及相关参数详解

    ---恢复内容开始--- 原文链接:g++和gcc的区别 一 .二者区别 gcc和g++都是GNU(一个组织)的编译器. 1.对于.c后缀的文件,gcc把它当做是C程序:g++当做是C++程序: 2. ...

  5. GCC与gcc,g++区别

    看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g+ ...

  6. GCC与G++区别

    gcc和g++的区别总结:gcc: GNU C Compilerg++: GNU C++ Compiler 共同点:均属于the GNU Compiler Collection,gcc是鼻祖,后来才有 ...

  7. cc、gcc、g++区别

    gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...

  8. OVERVIEW:gcc,g++,cmake,make

    首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...

  9. Linux - gcc和g++的区别

    一般linux系统都自带了gcc编译器的,你可以用你的安装光盘去安装,如果你是觉得自带的gcc版本太低了,可以去gcc的官方网站可以下载到,编译需要很长的时间,如果你只编译C或者C++可以只下载gcc ...

随机推荐

  1. Untiy3D - 窗口界面2

    Component 组件 Mesh:网格 Mesh Filter: 网格滤镜 Mesh Renderer 网格渲染器 Mesh Collider: 网格碰撞器.网格碰撞节点 Convex: 凸的.凸面 ...

  2. 深入JVM-java虚拟机的基本结构

    本文将介绍Java虚拟机的基本结构,各组成部分的作用,以及相互之间是如何协调的.而要了解这些,首先必须了解Java堆.Java栈.永久区和元数据区的基本概念. 一.Java虚拟机的架构 1.1 类加载 ...

  3. js004-变量、作用域和内存问题

    js004-变量.作用域和内存问题 4.1 基本类型和引用类型的值 基本类型:简单的数据段 引用类型:可能由多个值构成的对象 五种基本数据类型:undefined.null.boolean.Numbe ...

  4. PHP实现观察者模式

    <?php //php设计模式观察者模式 /** 被观察者 */ class user implements SplSubject{ public $lognum; public $hobby; ...

  5. vim 使用总结

    VIM分屏显示   1 . 水平分屏split(sp) || 垂直分屏vsplit(vs) :(v)split 输入这样的命令后vi就会将当前的窗口平分为两个,并且在这两个窗口中显示的是同一篇文章.如 ...

  6. 自然语言19.1_Lemmatizing with NLTK(单词变体还原)

    QQ:231469242 欢迎喜欢nltk朋友交流 https://www.pythonprogramming.net/lemmatizing-nltk-tutorial/?completed=/na ...

  7. 《JavaScript DOM编程艺术》笔记一

    1.CSS: 继承是CSS技术中的一项强大功能,节点树上的各个元素将继承其父元素的样式属性. 2.3种获取DOM元素方法:getElementById返回一个对象,getElementsByTagNa ...

  8. Docker Dockerfile详解

    http://blog.csdn.net/wsscy2004/article/details/25878223 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等 ...

  9. fork与vfork

    先看一个fork的例子: ; int main(void) { int var, pid; ; ) { printf("vfork error"); exit(-); } ) { ...

  10. SHIFT后门拿服务器之方法总结

    提权工具如下:cmd.exe Churrasco.exe nc.exe 提权前提:Wscript组件成功开启 如果Wscript组件被关闭,则使用以下方法开启: 源代码: <object run ...