• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            C和C++混合編程

            1.#pragma once
            關于#pragma once ,VC
            ++及G++都支持,大膽的用吧。


            導出類型必須一致.要么是C的,要么是C++
            2.__cplusplus
            這個是必須的
            #ifdef __cplusplus
            extern “C” {
            #endif

            // Routines Here

            #ifdef __cplusplus
            }
            #endif

            c++中調用c的代碼
            1、對于 C++ 中非類的成員函數,可以簡單的在函數聲明前面加 extern "C" ,通常函數聲明位于頭文件中,當然也可以將聲明和函數定義一起放在 cpp 中 ,在沒有聲明的情況下,直接在定義前添加 extern "C" 也可

            2、對于 C++ 類的成員函數,則需要另外做一個 cpp 文件,將需要調用的函數進行包裝 。
            要實現 C++ 中調用 C 的代碼,具體操作:

            對于 C 中的函數代碼,要么將 C 代碼的頭文件進行修改,在其被含入 C++ 代碼時在聲明中加入 extern "C" 或者在 C++ 代碼中重新聲明一下 C 函數,重新聲明時添加上 extern "C" 頭 。

            通過以上的說明,我明白一點,那就是加 extern "C" 頭一定是加在 C++ 的代碼文件中才能起作用的 。
            下面分析一下這個現象的實質原因:

            C 編譯器編譯函數時不帶函數的類型信息,只包含函數符號名字,如 C 編譯器把函數 int a(float x) 編譯成類似 _a 這樣的符號, C 連接器只要找到了調用函數的符號,就可以連接成功,它假設參數類型信息是正確的,這是 C 編譯連接器的缺點。而 C++ 編譯器為了實現函數重載,編譯時會帶上函數的類型信息,如他把上面的 a 函數可能編譯成 _a_float 這樣的符號為了實現重載,注意它還是沒有帶返回值得信息,這也是為什么 C++ 不支持采用函數返回值來區別函數重載的原因之一,當然,函數的使用者對函數返回值的處理方式(如忽略)也是重要原因。

            基于以上, C 調用 C++ ,首先需要用封裝函數把對 C++ 的類等的調用封裝成 C 函數以便 C 調用,于是 extern "C" 的作用是:讓編譯器知道這件事,然后以 C 語言的方式編譯和連接封裝函數 (通常是把封裝函數用 C++ 編譯器按 C++ 方式編譯,用了 extern "C" 后,編譯器便依 C 的方式編譯封裝接口,當然接口函數里面的 C++ 語法還是按 C++ 方式編譯;對于 C 語言部分 -- 調用者,還是按 C 語言編譯;分別對 C++ 接口部分和 C 部分編譯后,再連接就可以實現 C 調用 C++ 了 )。相反 ,C++ 調用 C 函數, extern "C" 的作用是:讓 C++ 連接器找調用函數的符號時采用 C 的方式 ,即使用 _a 而不是 _a_float 來找調用函數

            posted on 2011-04-19 11:32 天下 閱讀(564) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            <2012年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            99精品久久精品一区二区| 亚洲国产精品无码久久久久久曰| 久久久久青草线蕉综合超碰 | 国产精品免费久久久久久久久 | 亚洲精品乱码久久久久久自慰| 国产精品岛国久久久久| 久久无码人妻精品一区二区三区| 亚洲精品美女久久久久99| 成人精品一区二区久久| 青青草原精品99久久精品66| 久久人人爽人人澡人人高潮AV| 久久精品午夜一区二区福利| 久久伊人色| 国产免费久久久久久无码| 久久综合九色综合网站| 亚洲精品无码专区久久同性男 | 久久九九久精品国产| 乱亲女H秽乱长久久久| 欧美久久一级内射wwwwww.| 久久亚洲国产精品一区二区| 亚洲精品白浆高清久久久久久| 久久毛片免费看一区二区三区| 狠狠干狠狠久久| 久久精品99久久香蕉国产色戒| 亚洲午夜福利精品久久| 久久亚洲天堂| 久久精品亚洲精品国产欧美| 岛国搬运www久久| 国产精品成人久久久久三级午夜电影 | 欧洲性大片xxxxx久久久| 精品久久久久久综合日本| 久久精品国产亚洲AV蜜臀色欲 | 无遮挡粉嫩小泬久久久久久久| 亚洲精品97久久中文字幕无码| 午夜精品久久久久久| 国产精品99久久久精品无码 | 久久久久久A亚洲欧洲AV冫| 久久无码精品一区二区三区| 亚洲另类欧美综合久久图片区| 成人综合久久精品色婷婷| 狠狠精品久久久无码中文字幕|