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

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

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

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    extern和static釋析

    extern和static釋析
    注意:下文中提到的“變量”或“函數”均指的是“全局”的,同時也請大家務必注意聲明和定義的措辭(實際上,我這么說是有錯誤的,因為函數就沒有全局和局部之分,其實函數都是全局的,例如我們在A文件中定義了一個函數void fun(){},在B文件中直接就可以利用,[extern] void fun(); void main(){fun();})

    extern g_A;//這是聲明,而且是一個int型的聲明
    extern double g_A;//這是聲明
    extern double g_A=234.34;//這是聲明+定義
    extern用于聲明變量時,如果不指出變量的類型,則默認為int,如果不是int的,必須顯示指出變量的類型,否則出錯。

    extern實際上只對變量有用,對函數而言,只是個幌子(能夠更加清晰明了的讓我們知道也讓編譯器知道該函數可以用于“外交”),沒有實質性的作用,以后記住了,看到extern和函數扯上關系,你理都不用理,直接把它拿掉就OK了。但是它還是有那么一點用的,既然“存在的就是合理的”,那么它必然有點用啦,利用它可以在程序中取代include “*.h”來聲明函數,在一些復雜的項目中,我比較習慣在所有的函數聲明前添加extern修飾。

    本質上,我認為,函數可以將聲明和定義分開,而變量就不行了,因此只能借助于extern來實現這一點,要是變量也能將聲明和定義分開,或許extern根本就不該活在這個世上。

    extern可以被寫在變量/函數的聲明/定義處,但是標準的用法應該只是將其寫在聲明處,寫在定義處只不過為了再次強調或直觀明了而已。

    因此利用extern的威力,我們可以將變量的聲明放在頭文件中(因為誰都知道頭文件就怕出現變量或函數的定義,一旦被多次包含就會出現重復定義,編譯器不懼怕重復聲明,但懼怕重復定義,你這么寫“void zenmehui();void zenmehui();void zenmehui();void main(){zenmehui();}”肯定沒問題,不信你自己試試看)。
    =====================================================================
    與extern相對的是static,大家都熟悉static代表靜態的意思,卻很少有人注意到它還有“內部”(即表示該變量只供本文件內部使用)的意思。不過可以肯定的是,只要是用static修飾的變量,都會被放在內存中的“靜態存儲區”來存儲(我通常會把生成的可執行文件分成靜態存儲區、棧區、代碼區、一份含有所有變量和函數的清單《清單中的每一項會指向對應的變量或函數存儲的地方》)。
    靜態存儲區一般會放置:全局變量(又分為純粹全局的和被static修飾的僅供文件內部使用的兩種)、static修飾的局部變量。
    其實這些有關static的討論都是基于C語言的,在C++中新增了類的概念,類里使用的static在概念和意義上都有別去傳統的C語言,靜態的成員變量被存儲在類的靜態存儲區中,可以不必等待類實例化就使用,靜態的成員函數表明該函數只能使用類中的靜態成員變量和其他靜態成員函數。

    現在我希望大家今后不要再一看到static就把它完全等價于“靜態”之意了,總結一下:
    static修飾函數:
    在修飾非成員函數時表示該函數不是全局函數,而僅供本文件使用;
    在修飾成員函數時,表示該函數只能調用類的靜態成員變量并且該方法可以不必經由實例化的類對象就能夠應用;
    static修飾變量:
    修飾全局變量時,該變量只能供本文件內部使用;
    修飾成員變量時,該變量成為類變量,存儲在靜態存儲區中,不經過類實例就可以訪問該變量;
    修飾局部變量時,該變量在函數第一次被調用時初始化,并將其存放到靜態存儲區,函數退出后變量值保持不變,下一次進入函數時將跳過對它的初始化,它的生命周期直到程序退出。

    最后,要說明的是,static變量在全局中只有一份,不會有多份拷貝。

     

    posted on 2008-08-18 16:13 so true 閱讀(941) 評論(1)  編輯  收藏 所屬分類: C&C++

    評論

    # re: extern和static釋析  回復  更多評論   

    與extern相對的是static,大家都熟悉static代表靜態的意思,卻很少有人注意到它還有“內部”(即表示該變量只供本文件內部使用)的意思
    thx
    2009-08-06 14:28 | wyx
    主站蜘蛛池模板: 亚洲最大的成人网站| 亚洲成亚洲乱码一二三四区软件| 亚洲国产精品综合福利专区| 99免费观看视频| 亚洲国产精品一区| 91香蕉国产线在线观看免费| 亚洲AV本道一区二区三区四区| 国产激情免费视频在线观看 | 亚洲精品视频免费观看| 久久久久亚洲AV综合波多野结衣 | 亚洲av无码专区青青草原| 免费看大美女大黄大色| 国产综合成人亚洲区| 亚洲男女内射在线播放| 最近国语视频在线观看免费播放| 亚洲AV无码乱码国产麻豆穿越| 国产精品偷伦视频观看免费| 亚洲黄色一级毛片| 一二三四免费观看在线视频中文版 | 手机永久免费的AV在线电影网| 亚洲精品国产精品国自产观看 | 欧洲乱码伦视频免费国产| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费视频爱爱太爽了| 亚洲成av人无码亚洲成av人| 天堂亚洲免费视频| 日本一道本不卡免费 | 一级一级毛片免费播放| 久久久久久亚洲精品中文字幕| 国产妇乱子伦视频免费| 国产成人精品亚洲| 久久精品国产亚洲| 四虎影院免费在线播放| 国产97视频人人做人人爱免费| 亚洲欧洲国产日韩精品| 日本久久久免费高清| 久久久久久国产精品免费免费男同 | 青青青免费国产在线视频小草| 黄人成a动漫片免费网站| 久久丫精品国产亚洲av| 免费a级毛片无码av|