<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0
    轉http://www.yuanma.org/data/2007/0406/article_2498.htm

    gcc和g++都是GNU(組織)的一個編譯器。

    誤區一:gcc只能編譯c代碼,g++只能編譯c++代碼
    兩者都可以,但是請注意:
    1.后綴為.c的,gcc把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。C++的語法規則更加嚴謹一些。
    2.編譯階段,g++會調用gcc,對于c++代碼,兩者是等價的,但是因為gcc命令不能自動和C++程序使用的庫聯接,所以通常用g++來完成鏈接,為了統一起見,干脆編譯/鏈接統統用g++了,這就給人一種錯覺,好像cpp程序只能用g++似的。
     
    誤區二:gcc不會定義__cplusplus宏,而g++會
    實際上,這個宏只是標志著編譯器將會把代碼按C還是C++語法來解釋,如上所述,如果后綴為.c,并且采用gcc編譯器,則該宏就是未定義的,否則,就是已定義。
     
    誤區三:編譯只能用gcc,鏈接只能用g++
    嚴格來說,這句話不算錯誤,但是它混淆了概念,應該這樣說:編譯可以用gcc/g++,而鏈接可以用g++或者gcc -lstdc++。因為gcc命令不能自動和C++程序使用的庫聯接,所以通常使用g++來完成聯接。但在編譯階段,g++會自動調用gcc,二者等價。


    誤區四:extern "C"與gcc/g++有關系

    實際上并無關系,無論是gcc還是g++,用extern "c"時,都是以C的命名方式來為symbol命名,否則,都以c++方式命名。試驗如下:
    me.h
    extern "C" void CppPrintf(void);
     
    me.cpp:
    #include <iostream>
    #include "me.h"
    using namespace std;
    void CppPrintf(void)
    {
         cout << "Hello"n";
    }
     
    test.cpp:
    #include <stdlib.h>
    #include <stdio.h>
    #include "me.h"        
    int main(void)
    {
        CppPrintf();
        return 0;
    }
     
    1. 先給me.h加上extern "C",看用gcc和g++命名有什么不同

    [root@root G++]# g++ -S me.cpp
    [root@root G++]# less me.s
    .globl _Z9CppPrintfv        //注意此函數的命名
            .type   CppPrintf, @function
    [root@root GCC]# gcc -S me.cpp
    [root@root GCC]# less me.s
    .globl _Z9CppPrintfv        //注意此函數的命名
            .type   CppPrintf, @function
    完全相同!
                   
    2. 去掉me.h中extern "C",看用gcc和g++命名有什么不同

    [root@root GCC]# gcc -S me.cpp
    [root@root GCC]# less me.s
    .globl _Z9CppPrintfv        //注意此函數的命名
            .type   _Z9CppPrintfv, @function
    [root@root G++]# g++ -S me.cpp
    [root@root G++]# less me.s
    .globl _Z9CppPrintfv        //注意此函數的命名
            .type   _Z9CppPrintfv, @function
    完全相同!
    【結論】完全相同,可見extern "C"與采用gcc/g++并無關系,以上的試驗還間接的印證了前面的說法:在編譯階段,g++是調用gcc的。


    posted on 2009-02-13 11:25 何克勤 閱讀(210) 評論(0)  編輯  收藏 所屬分類: C/C++GNU Linux/Unix
    主站蜘蛛池模板: 亚洲天堂免费在线| 亚洲综合区图片小说区| 亚洲激情视频图片| 真人做A免费观看| 亚洲区视频在线观看| 亚欧在线精品免费观看一区| 亚洲网红精品大秀在线观看| 精品国产sm捆绑最大网免费站| 亚洲无线电影官网| 永久在线免费观看| 亚洲综合一区二区三区四区五区| 成人男女网18免费视频| 国产亚洲精品第一综合| 爱情岛论坛网亚洲品质自拍| 免费无码专区毛片高潮喷水 | 亚洲男同gay片| 免费观看一级毛片| 在线91精品亚洲网站精品成人| 全黄a免费一级毛片人人爱| 中文字幕永久免费| 91精品国产亚洲爽啪在线影院| 日本三级2019在线观看免费| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲人成色7777在线观看| 污污网站18禁在线永久免费观看| 亚洲美女一区二区三区| 免费人妻无码不卡中文字幕18禁| 中国一级特黄的片子免费 | 在线观看国产情趣免费视频| 中国一级毛片视频免费看| 亚洲中文无码线在线观看| 四虎国产精品免费久久影院| a级毛片在线视频免费观看| 亚洲jjzzjjzz在线播放| 无码国产亚洲日韩国精品视频一区二区三区| 中文字幕高清免费不卡视频| 亚洲av无码一区二区三区天堂古代| 又粗又硬免费毛片| 亚洲一级免费毛片| 国产精品青草视频免费播放| 亚洲乱码卡三乱码新区|