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. 捉襟见肘之UIViewAnimationOptions

    [UIView animateWithDuration:duration delay:0.0f options:(curve << | UIViewAnimationOptionBegin ...

  2. Yocto开发笔记之《应用程序架构》(QQ交流群:519230208)

    QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== Eclip ...

  3. FFT质数打表程序

    #include<bits/stdc++.h> using namespace std; typedef long long ll; void sol(ll x){ int y=0; fo ...

  4. JQuery------获取<input type="file">中的文件内容

    html <div class="File">添加附件</div><input id="upfile" name="up ...

  5. WinForm------点击Control弹出MessageBox

    private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //弹 ...

  6. Oracle数据库的备份方法

    1.引言 Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统.比如使用export实用程序导出数据库对象.使用Oracle备份数据 ...

  7. Android学习笔记——MixLayout

    该工程的功能是实现LinearLayout+TableLayout 以下代码是MainActivity.java中的代码 package com.example.mixlayout; import a ...

  8. 用Open Live Account写博文的第一篇文章,立个flag

    在设置的时候出了点问题,还好有blog这种神器,直接上网址http://www.cnblogs.com/yishujun/p/5328617.html 高亮插件来自 http://www.cnblog ...

  9. 防SQL注入代码(ASP版)

    <% Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份 头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向页面, ...

  10. MVC 随记

    2014-09-04 [1] Json var contact = new Object(); contact.firstname = "Jesper"; contact.surn ...