• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 讀書筆記(1) c與c++程序連接問題

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    c與c++程序連接問題 它們之間的連接問題主要是因為c c++編繹器對函數名譯碼的方式不能所引起的,考慮下面兩個函數 /* c*/ int strlen(char* string) { ... } //c++ int strlen(char* string) { ... } 兩個函數完全一樣。在c在函數是通過函數名來識別的,而在
    c與c++程序連接問題
    它們之間的連接問題主要是因為c c++編繹器對函數名譯碼的方式不能所引起的,考慮下面兩個函數
    /* c*/
    int strlen(char* string)
    {
    ...
    }

    //c++
    int strlen(char* string)
    {
    ...
    }

    兩個函數完全一樣。在c在函數是通過函數名來識別的,而在C++中,由于存在函數的重載問題,函數的識別方式通函數名,函數的返回類型,函數參數列表三者組合來完成的。因此上面兩個相同的函數,經過C,C++編繹后會產生完全不同的名字。所以,如果把一個用c編繹器編繹的目標代碼和一個用C++編繹器編繹的目標代碼進行連接,就會出現連接失敗的錯誤。

    解決的方法是使用extern C,避免C++編繹器按照C++的方式去編繹C函數
    在頭文件中定義:
    extern "C" int strlen(char* string)

    extern "C"
    {
    int strlen(char* string)
    }
    當C編繹器遇到extern "C"的時候就用傳統的C函數編譯方法對該函數進行編譯。由于C編繹器不認識extern "C"這個編繹指令,而程序員又希望C,C++程序能共用這個頭文件,因此通常在頭文件中使用_cplusplus宏進行區分:
    #if define _cplusplus
    extern "C"{
    #endif
    int strlen(char* string)
    #ifdefine _cplusplus
    }
    #endif

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>