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

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

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

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    C -extern使用

    Posted on 2010-11-29 15:29 幻海藍夢 閱讀(231) 評論(0)  編輯  收藏 所屬分類: C語言學習
    1 基本解釋

      extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示 編譯器遇到此變量和函數時在其他模塊中尋找其定義。

    另外,extern也可用來進行鏈接指定。
    2 問題:extern 變量

    在一個源文件里定義了一個數組:

    char a[6];

    在另外一個文件里用下列語句進行了聲明:

    extern char *a;

    請問,這樣可以嗎?

    答 案與分析:

    1)、不可以,程序運行時會告訴你非法訪問。原因在于,指向類型T的指針并不等價于類型T的數組。extern char *a聲明的是一個指針變量而不是字符數組,因此與實際的定義不同,從而造成運行時非法訪問。應該將聲明改為extern char a[ ]。

    2)、例子分析如下,如果a[] = "abcd",則外部變量a=0x61626364 (abcd的ASCII碼值),*a顯然沒有意義,如下圖:

    500)this.width=500;" width="500" border="0">
    顯然a指向的空間(0x61626364)沒有意義,易出現非法內存訪問。
      3)、在使用extern時候要嚴格對應聲明時的格式,在實際編程中,這樣的錯誤屢見不鮮。
    4)、extern用在變量聲明中常常有這樣一個 作用,你在*.c文件中聲明了一個全局的變量,這個全局的變量如果要被引用,就放在*.h中并用extern來聲明。
    3 問題:extern 函數1

    常常見extern放在函數的前面成為函數聲明的一部分,那么,C語言的關鍵字 extern在函數的聲明中起什么作用?

    答案與分析:

    如果函數的聲明中帶有關鍵字extern,僅僅是暗示這個 函數可能在別的源文件里定義,沒有其它作用。即下述兩個函數聲明沒有明顯的區別:

    extern int f(); 和int f();

    當然,這樣的用處還是有 的,就是在程序中取代include “*.h”來聲明函數,在一些復雜的項目中,我比較習慣在所有的函數聲明前添加extern修飾。

    4 問題:extern 函數2

    當函數提供方單方面修改函數原型時,如果使用方不知情繼續沿用 原來的extern申明,這樣編譯時編譯器不會報錯。但是在運行過程中,因為少了或者多了輸入參數,往往會照成系統錯誤,這種情況應該如何解決?

    答案與分析:

    目前業界針對這種情況的處理沒有一個很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供對外部接口的 聲明,然后調用方include該頭文件,從而省去extern這一步。以避免這種錯誤。

    寶劍有雙鋒,對extern的應用,不同的 場合應該選擇不同的做法。

    5 問題:extern “C”

    在C++環境下使 用C函數的時候,常常會出現編譯器無法找到obj模塊中的C函數定義,從而導致鏈接失敗的情況,應該如何解決這種情況呢?

    答案與分 析:

    C++語言在編譯的時候為了解決函數的多態問題,會將函數名和參數聯合起來生成一個中間的函數名稱,而C語言則不會,因此會造成 鏈接時找不到對應函數的情況,此時C函數就需要用extern “C”進行鏈接指定,這告訴編譯器,請保持我的名稱,不要給我生成用于鏈接的中間函數名。

    下面是一個標準的寫法:

    //在.h文件的頭上
    #ifdef __cplusplus
    #if __cplusplus
    extern "C"{
    #endif
    #endif /* __cplusplus */


    //.h文件結束的地方
    #ifdef __cplusplus
    #if __cplusplus
    }
    #endif
    #endif /* __cplusplus */

    原文; http://blog.chinaunix.net/u2/67661/showart_677178.html
    主站蜘蛛池模板: 亚洲国产日韩女人aaaaaa毛片在线| 亚洲国产精品乱码一区二区 | 中国在线观看免费高清完整版| 久久久亚洲欧洲日产国码农村| 大地资源在线资源免费观看| 伊伊人成亚洲综合人网7777| 美女无遮挡拍拍拍免费视频| 国产成人亚洲综合无码精品 | 国产jizzjizz免费看jizz| 免费精品国自产拍在线播放| 亚洲欧洲久久久精品| 中文字幕av免费专区| 亚洲gv猛男gv无码男同短文| 在线观看免费中文视频| 亚洲乱码一区二区三区国产精品| 午夜私人影院免费体验区| 新最免费影视大全在线播放| 久久久久噜噜噜亚洲熟女综合| 国产色爽免费无码视频| 亚洲日本国产乱码va在线观看| 成人毛片18女人毛片免费96| 在线精品自拍亚洲第一区| 亚洲伊人成无码综合网| 99精品视频在线观看免费专区 | 国内自产拍自a免费毛片| 高潮毛片无遮挡高清免费 | 亚洲1234区乱码| 免费人成无码大片在线观看| 国产在线观看无码免费视频| 67pao强力打造67194在线午夜亚洲| 国产桃色在线成免费视频| 一级毛片免费视频网站| 亚洲一区二区在线免费观看| 免费羞羞视频网站| 免费观看一区二区三区| 国产成人精品亚洲2020| 亚洲线精品一区二区三区影音先锋| 四虎在线成人免费网站| 一级毛片人与动免费观看| 亚洲成a人片在线网站| 亚洲国模精品一区|