zoukankan      html  css  js  c++  java
  • Linux下gcc和g++的区别

    首先编写了第一个C++程序,Hello,world!

    #include <iostream>
    using namespace std;
    void main()
    ...{
    cout << "Hello,world!" <<endl;
    return;
    }


    用命令:GCC -o test test.cpp编译,有问题。然后分析,即分开运行GCC.

    GCC -c -o test.o test.cpp。成功执行。

    GCC -o test test.o。出现一堆链接错误。

    g++ -o test test.o。成功执行。

    由此发现,GCC与g++还有有一些区别的。

    GCC and g++分别是gnu的c & c++编译器 GCC/g++在执行编译工作的时候,总共需要4步

     
    1.预处理,生成.i的文件[预处理器cpp
    2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器ccl
    3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as
    4.连接目标代码,生成可执行程序[链接器ld], Eg: 将print.o文件连接合并到hello.o文件中

    1 :两者都可以编译C和C++代码,但是请注意:
    (1).后缀为.c的,GCC把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。

    (2).编译阶段,g++会调用GCC,对于c++代码,两者是等价的,但是因为GCC命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

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

     
    3 :编译可以用GCC/g++,而链接可以用g++或者GCC -lstdc++。因为GCC命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用GCC,二者等价。
  • 相关阅读:
    Tuning 14 Using Oracle Data Storage Structures Efficiently
    Tuning 13 Using oracle blocks Efficiently
    Tuning 12 manage statistics
    Tuning SQL 11
    【TYVJ】1307 联络员(最小生成树)
    【wikioi】1022 覆盖(匈牙利)
    【TYVJ】1338 QQ农场(最大流+最大权闭合图)
    【BZOJ】3038: 上帝造题的七分钟2(线段树+暴力)
    【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
    【BZOJ】1041: [HAOI2008]圆上的整点(几何)
  • 原文地址:https://www.cnblogs.com/zlcxbb/p/5759738.html
Copyright © 2011-2022 走看看