• gcc 和g++区别


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

  • 相关阅读:
    python走起之第十七话
    python走起之第十五话
    python走起之第十四话
    python走起之第十三话
    python走起之第十二话
    python走起之第十一话
    python走起之第九话
    python走起之第九话
    python走起之第八话
    python走起之第六话
  • 原文地址:https://www.cnblogs.com/huacw/p/3559557.html
Copyright © 2020-2023  润新知