• <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 天下 閱讀(562) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            <2013年3月>
            242526272812
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久精品人人做人人爽电影蜜月| 国产一级做a爰片久久毛片| 国产精品欧美久久久久无广告| 四虎国产精品免费久久5151| 欧美午夜A∨大片久久| 久久久亚洲裙底偷窥综合 | 欧美一级久久久久久久大片| 久久亚洲日韩看片无码| 久久精品国产一区| 久久精品亚洲AV久久久无码| 日韩精品国产自在久久现线拍| 日本久久久久久久久久| 91精品国产色综久久| 久久精品国产99久久久| 亚洲国产精品无码久久青草| 久久91精品久久91综合| 久久无码国产专区精品| 久久精品中文字幕一区| 99久久婷婷国产综合亚洲| 欧美日韩精品久久久久| 精品国产婷婷久久久| 精品综合久久久久久97超人| 国产成年无码久久久免费| 久久笫一福利免费导航| 国产ww久久久久久久久久| 久久精品国产亚洲av水果派 | 久久福利片| 国产成人久久精品一区二区三区| 精品国产乱码久久久久软件| 九九久久精品国产| 国产综合免费精品久久久| 青青国产成人久久91网| 狠狠狠色丁香婷婷综合久久五月| 色欲av伊人久久大香线蕉影院| 欧美激情精品久久久久久久九九九 | 狠狠综合久久综合中文88| 国产2021久久精品| 国内精品久久久久久中文字幕| 国产精品狼人久久久久影院| 精品人妻伦一二三区久久| 人妻无码久久精品|