• <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)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久精品国产免费观看| 久久综合综合久久狠狠狠97色88| 久久本道综合久久伊人| 婷婷久久综合| 九九久久自然熟的香蕉图片| 久久人人爽人人澡人人高潮AV| 久久九九久精品国产免费直播| 99国产精品久久久久久久成人热| 欧美日韩精品久久久免费观看| AV色综合久久天堂AV色综合在| 久久艹国产| 99久久婷婷免费国产综合精品| 久久久国产打桩机| 久久久久婷婷| 久久91亚洲人成电影网站| 亚洲乱码中文字幕久久孕妇黑人 | 亚洲精品无码久久久久去q| 久久九九亚洲精品| 欧美牲交A欧牲交aⅴ久久| 久久亚洲天堂| 国产成人无码精品久久久免费| 久久午夜无码鲁丝片| 国内精品久久久久影院薰衣草 | 成人久久精品一区二区三区| 久久人人爽人人爽人人片AV麻烦| 久久久久香蕉视频| 伊人丁香狠狠色综合久久| 99精品国产在热久久无毒不卡| 日韩精品久久无码人妻中文字幕| 模特私拍国产精品久久| 无码8090精品久久一区| 亚洲第一永久AV网站久久精品男人的天堂AV| 国产精品99久久精品爆乳| 青青青国产成人久久111网站| 久久国产精品久久精品国产| 国内精品久久久久久野外| 99久久成人国产精品免费| 国产精品久久波多野结衣| 久久99精品国产麻豆宅宅| 99久久精品免费看国产| 久久久久亚洲精品中文字幕|