• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    適用于C語言的對(duì)象模型的研究與實(shí)現(xiàn)

    2013-07-03 00:45:10孟繁超葉會(huì)英
    關(guān)鍵詞:面向?qū)ο?/a>實(shí)例內(nèi)存

    孟繁超,葉會(huì)英

    (鄭州大學(xué) 信息工程學(xué)院,河南 鄭州 450001)

    0 引 言

    隨著面向?qū)ο蟮木幊趟枷耄╫bject oriented programming)的推廣與普及,C 語言在數(shù)據(jù)封裝上的缺點(diǎn)也日益凸顯。為了解決這一問題,Bjarne Stroustrup于20世紀(jì)80年代發(fā)明了C++語言。C++語言在不斷發(fā)展和改進(jìn)的同時(shí),由于引入了過多的特性,其依舊存在語法過于冗雜,標(biāo)準(zhǔn)不統(tǒng)一等問題,這也使得其在一些硬件受限設(shè)備中以及系統(tǒng)級(jí)編程中并不適用。

    雖然C語言本身對(duì)面向?qū)ο蟮奶匦灾С钟邢蓿@并不影響面向?qū)ο蟮乃枷朐贑 語言中的應(yīng)用。實(shí)際中,可借助代碼生成工具或代碼擴(kuò)展工具配合一定的代碼規(guī)范或設(shè)計(jì)模式進(jìn)行模擬,從而提高C 程序的可重用性。在桌面Linux系統(tǒng)中廣泛使用的GNOME 界面系統(tǒng)是C 語言應(yīng)用面向?qū)ο笏枷氲囊粋€(gè)代表,其底層的GObject庫提供了一套完善的面向?qū)ο蟮念愋拖到y(tǒng)。而早在早在C++創(chuàng)立之初,Bjarne Stroustrup也曾嘗試過用類似的方法對(duì)C語言進(jìn)行改造[1-2]。

    在C89標(biāo)準(zhǔn)[3]中增加了泛型指針以及C99標(biāo)準(zhǔn)[4]中增加可變宏參數(shù)、結(jié)構(gòu)體初始化等特性的支持之后,C 語言的元編程能力得以進(jìn)一步的加強(qiáng)。合理的利用現(xiàn)代編譯器的這些特性,配合專門設(shè)計(jì)的對(duì)象模型,可以將部分C++在編譯時(shí)完成的動(dòng)作讓C 語言在運(yùn)行時(shí)來進(jìn)行,進(jìn)而可以在保證易用性的同時(shí)為C 語言增加對(duì)封裝、繼承和多態(tài)等特性的支持。實(shí)際中,利用托管于Google Code的OOCGCC項(xiàng)目[5]中的代碼,可以完成對(duì)面向?qū)ο笏枷氲哪M,且能夠很好的適用于AVR,STM32等一些嵌入式平臺(tái)。

    1 對(duì)象模型的內(nèi)存分布

    1.1 C++的對(duì)象模型

    無論何種編程語言,只要其具備面向?qū)ο蟮奶匦?,都需要專門為其設(shè)計(jì)特定的對(duì)象模型。為了方便說明,這里以一個(gè)C++類為例引出幾種常規(guī)的對(duì)象模型的設(shè)計(jì)。

    在C++中,類的成員有兩種內(nèi)存屬性,靜態(tài)的(static)和非靜態(tài)的(non-static)。而類的方法則有3種內(nèi)存屬性,靜態(tài)的(static),非靜態(tài)的(non-static)以及虛擬的(virtual)。

    現(xiàn)假定有一用C++定義的類如圖1所示。

    圖1 C++類示例

    而圖1例子中涵蓋了這些不同屬性的方法和成員,其內(nèi)存分布[6]情況如圖2所示。

    圖2 C++內(nèi)存模型

    C++的對(duì)象模型中有相當(dāng)一部分內(nèi)存空間是在編譯時(shí)獨(dú)立分配的,同時(shí)如果某個(gè)類有以virtual關(guān)鍵字聲明的方法(圖1中為虛析構(gòu)方法)則該模型會(huì)具備獨(dú)立的虛表結(jié)構(gòu),且在虛表結(jié)構(gòu)中還擁有一個(gè)提供RTTI(RunTime type information)特性的類型信息區(qū)域。

    借助于編譯器,C++可以保證使用時(shí)代碼的簡(jiǎn)潔性,但如果要使用C語言直接去實(shí)現(xiàn)這樣的對(duì)象模型,因?yàn)橐獙⒕幾g時(shí)的工作轉(zhuǎn)移至運(yùn)行時(shí)來做,必然會(huì)引入大量額外的附加代碼。為此,必須對(duì)該模型進(jìn)行改良,以適應(yīng)C 語言的某些特性。

    1.2 適用于C語言的對(duì)象模型

    用C語言去模擬面向?qū)ο蟮奶匦杂泻芏喾绞?,引言中提及的GObject庫雖然模擬了很多面向?qū)ο蟮奶匦?,但這種模擬因?yàn)橐肓诉^多的特性而在實(shí)際使用時(shí)顯得非常繁瑣[7-8]。為了在功能和易用性之間尋求一種平衡,OOCGCC項(xiàng)目中設(shè)計(jì)并實(shí)現(xiàn)了一種新的對(duì)象模型,利用現(xiàn)代C編譯器的特性同時(shí)結(jié)合元編程技巧,在模擬了面向?qū)ο蟮幕咎匦缘耐瑫r(shí),保證了易用性,簡(jiǎn)化了開發(fā)的復(fù)雜度。對(duì)應(yīng)于圖1 中的例子,這種新的模型的內(nèi)存分布如圖3所示。

    和圖2中C++對(duì)象模型一樣的是,將虛表結(jié)構(gòu)和實(shí)例結(jié)構(gòu)分離,這樣可以有效的區(qū)分成員和方法,有助于內(nèi)存的節(jié)約。和C++模型的主要不同是將cnt成員放在虛表結(jié)構(gòu)中并在虛表結(jié)構(gòu)中保留了指向方法的指針。同時(shí),在虛表結(jié)構(gòu)中增加了一個(gè)實(shí)例計(jì)數(shù)用的成員。而對(duì)于類的方法,因?yàn)镃語言無法直接去調(diào)用,故在虛表結(jié)構(gòu)中保留了指向其真實(shí)函數(shù)地址的函數(shù)指針。

    圖3 OOC-GCC的內(nèi)存模型

    因?yàn)椴荒芙柚诰幾g器,OOC-GCC項(xiàng)目并沒有實(shí)現(xiàn)完整的類型系統(tǒng),故省略了C++模型中和類型信息相關(guān)的結(jié)構(gòu),但并不影響對(duì)面向?qū)ο笾蟹庋b,繼承,多態(tài)等特性的模擬。如果需要對(duì)類型系統(tǒng)的模擬,也可配合GObject中的類型系統(tǒng)使用。

    1.3 支持單根繼承的對(duì)象模型

    現(xiàn)假設(shè)一個(gè)類B繼承了圖1中所表述的類A,那么按照本文中提出的內(nèi)存模型,其具體內(nèi)存分配如圖4所示。

    圖4 OOC-GCC單根繼承對(duì)象模型

    2 對(duì)象模型的使用

    圖4中看似復(fù)雜的內(nèi)存布局,可配合表1中所定義的一些宏一起使用,無需經(jīng)過任何第三方工具即可實(shí)現(xiàn)類的設(shè)計(jì)與使用。

    表1 OOC-GCC宏的定義

    B的實(shí)例部分繼承了A的實(shí)例部分的內(nèi)容,而B的虛表結(jié)構(gòu)繼承了A的虛表結(jié)構(gòu)的內(nèi)容,但虛表結(jié)構(gòu)頭部的析構(gòu)指針和實(shí)例計(jì)數(shù)器部分保持不變。在B的實(shí)例中保留有兩個(gè)虛表指針,分別指向A的虛表結(jié)構(gòu)以及B的虛表結(jié)構(gòu)。這意味著,即使在沒有分配A的實(shí)例的前提下,直接聲明一個(gè)B的實(shí)例,會(huì)同時(shí)為之分配A和B的兩個(gè)虛表結(jié)構(gòu),而B的虛表結(jié)構(gòu)因?yàn)槔^承的原因,也包含了A的虛表結(jié)構(gòu)的內(nèi)容。

    在設(shè)計(jì)一個(gè)類時(shí),CLASS宏和STATIC 宏分別用來定義一個(gè)類的實(shí)例結(jié)構(gòu)和虛表結(jié)構(gòu),而與之相應(yīng)的CLASS_EX 宏以及STATIC_EX 宏則為實(shí)例結(jié)構(gòu)和虛表結(jié)構(gòu)的定義增加了對(duì)單根繼承特性的支持。ASM和ASM_EX 則是用來將類的定義與實(shí)現(xiàn)的類的構(gòu)造函數(shù)與析構(gòu)函數(shù)進(jìn)行綁定。

    在對(duì)一個(gè)類進(jìn)行操作時(shí),表1中定義的NEW 宏和DELETE宏和C++中的new 與delete關(guān)鍵字十分類似,它們都會(huì)在堆內(nèi)存上開辟或釋放一塊區(qū)域并進(jìn)行對(duì)象的構(gòu)造與析構(gòu)。NEW0 宏和DELETE0 宏則對(duì)應(yīng)NEW 宏和DELETE宏不接收任何參數(shù)的情形。ST 宏則用來通過實(shí)例結(jié)構(gòu)獲取指向虛表結(jié)構(gòu)的指針。*Fn則是對(duì)一定形式的函數(shù)指針的類型重定義,如iFn表示返回值為int型的函數(shù)指針,而vFn表示無返回值(返回值為void型)的函數(shù)指針。

    使用表1中的宏來描述圖4中定義的類A和類B的代碼如圖5中所示。

    3 對(duì)象模型的設(shè)計(jì)

    3.1 功能模塊的設(shè)計(jì)

    OOC-GCC中的模塊如圖6所示。

    OOC-GCC項(xiàng)目由多個(gè)模塊構(gòu)成,這些模塊被定義在與模塊名相對(duì)應(yīng)的.h或.c文件中。其中,最為核心的部分定義在OOCore模塊中。OOBase模塊則對(duì)OOCore模塊進(jìn)行了擴(kuò)展,使之支持虛表結(jié)構(gòu)以及單根繼承等特性。對(duì)于使用者而言,只需關(guān)注兩個(gè)模塊,一個(gè)是OOStd模塊,該模塊用于對(duì)底層較復(fù)雜的內(nèi)容進(jìn)行重定義,簡(jiǎn)化實(shí)際使用時(shí)的復(fù)雜度;另一個(gè)是OOCfg模塊,該模塊用于對(duì)整體進(jìn)行配置。通過OOCfg模塊中的宏開關(guān),可以選擇性的使用調(diào)試用的OODbg模塊,也可以開啟對(duì)匿名結(jié)構(gòu)體等特性的支持。

    3.2 實(shí)例結(jié)構(gòu)和虛表結(jié)構(gòu)的設(shè)計(jì)

    為了使表1中和類的設(shè)計(jì)相關(guān)的宏能和圖3中以及圖4中所表述的對(duì)象模型相適應(yīng),當(dāng)使用CLASS,STATIC,CLASS_EX,STATIC_EX 宏定義一個(gè)類的時(shí)候,除了類本身的成員外,還會(huì)隱式的引入一些和構(gòu)造與析構(gòu)相關(guān)的成員。

    每當(dāng)使用CLASS宏時(shí),都會(huì)在一個(gè)結(jié)構(gòu)體的頭部放置一個(gè)名為OOC_STRUCT__classRootHead的結(jié)構(gòu)體。相應(yīng)的每當(dāng)使用STATIC宏時(shí),頭部的結(jié)構(gòu)體名為OOC_STRUCT__staticRootHead。具體的定義如圖7所示。

    圖7 頭部結(jié)構(gòu)設(shè)計(jì)

    每一個(gè)用CLASS定義的結(jié)構(gòu)體的頭部都有一個(gè)指向真實(shí)虛表結(jié)構(gòu)的指針。每一個(gè)STATIC 宏的頭部都有一個(gè)指向真實(shí)析構(gòu)函數(shù)的函數(shù)指針,以及一個(gè)用于實(shí)例計(jì)數(shù)的成員變量。通過DELETE宏進(jìn)行析構(gòu)時(shí),即調(diào)用圖7中__ooc_classDelete指針指向的函數(shù)。而用于計(jì)數(shù)的變量保證了使用者無需關(guān)注虛表結(jié)構(gòu)的構(gòu)造與析構(gòu),當(dāng)一個(gè)類的第一實(shí)例構(gòu)造之前,該類的虛表結(jié)構(gòu)已經(jīng)自動(dòng)構(gòu)造完成了;而當(dāng)一個(gè)類的最后一個(gè)實(shí)例銷毀后,該類的虛表結(jié)構(gòu)的析構(gòu)函數(shù)也會(huì)被自動(dòng)調(diào)用。

    從圖5可以看出,STATIC宏應(yīng)在CLASS宏后的大括號(hào)內(nèi)使用。其不僅引入了虛表結(jié)構(gòu)的頭部,還引入了實(shí)例結(jié)構(gòu)的尾部結(jié)構(gòu)。繼承關(guān)系每加深一級(jí),會(huì)在實(shí)例結(jié)構(gòu)的尾部多分配一個(gè)雙重泛型指針,用于指向當(dāng)前類型的虛表結(jié)構(gòu)。而實(shí)例結(jié)構(gòu)頭部中虛表指針指向的是最后一級(jí)類型的虛表結(jié)構(gòu)。之所以這里采用雙重泛型指針,是為了保證在構(gòu)造與析構(gòu)時(shí)可以直接通過實(shí)例的構(gòu)造或析構(gòu)函數(shù)去修改位于虛表結(jié)構(gòu)中的用于實(shí)例計(jì)數(shù)的成員,同時(shí)這樣的設(shè)計(jì)可以保證宏的靈活性,不會(huì)引入額外的全局變量。

    和CLASS 宏以及STATIC 宏不同,支持繼承的宏CLASS_EX 以及STATIC_EX 并不會(huì)再次引入實(shí)例結(jié)構(gòu)與虛表結(jié)構(gòu)的頭部。

    3.3 構(gòu)造與析構(gòu)的設(shè)計(jì)

    假定要頂一個(gè)名為A的類,在使用CLASS和STATIC來定義的時(shí)候,在底層定義了名為A和StA的結(jié)構(gòu)體,以及用于分配內(nèi)存的newA 函數(shù)以及newStA 函數(shù),用于釋放內(nèi)存的delA 函數(shù)以及delStA 函數(shù),用于構(gòu)造的iniA 函數(shù)以及iniStA 函數(shù),用于析構(gòu)的finA 函數(shù)以及finStA 函數(shù)。在生成與銷毀一個(gè)實(shí)例時(shí),和虛表結(jié)構(gòu)相關(guān)的newStA 函數(shù),delStA 函數(shù),iniStA 函數(shù)以及finStA 函數(shù)會(huì)被自動(dòng)的調(diào)用。而ASM 宏則用來將用戶自己定義的A_reload 函數(shù),A_unload 函數(shù),A_reloadSt函數(shù)以及A_unloadSt函數(shù)與上述的幾個(gè)函數(shù)進(jìn)行綁定。

    以圖5中實(shí)例B的構(gòu)造與析構(gòu)為例,先使用NEW0宏在堆內(nèi)存聲明一個(gè)類B的實(shí)例,最后又用DELETE0宏將其銷毀并釋放,期間并沒有其它實(shí)例的分配與銷毀。在B的實(shí)例聲明和銷毀時(shí),其會(huì)按圖8中所示的順序調(diào)用一些構(gòu)造和析構(gòu)相關(guān)的函數(shù)。

    構(gòu)造時(shí),第1,2步完成B的虛表結(jié)構(gòu)的構(gòu)造,第3步完成A的虛表結(jié)構(gòu)的構(gòu)造,第4,5步完成B的實(shí)例結(jié)構(gòu)的構(gòu)造。而析構(gòu)時(shí),第1,2步完成B的實(shí)例結(jié)構(gòu)的析構(gòu),第3步完成A的虛表結(jié)構(gòu)的析構(gòu),第4,5步完成B的虛表結(jié)構(gòu)的析構(gòu)。

    圖8 構(gòu)造與析構(gòu)的順序

    可以看出,構(gòu)造和析構(gòu)的順序是完全對(duì)稱的,并且子類的構(gòu)造和析構(gòu)會(huì)自動(dòng)調(diào)用父類的構(gòu)造和析構(gòu),同時(shí),虛表結(jié)構(gòu)的分配與銷毀也是自動(dòng)的。而這些都是由ASM 宏和ASM_EX 宏保證的。

    當(dāng)定義的類或聲明的實(shí)例更加復(fù)雜時(shí),為了減少記憶的負(fù)擔(dān),其也應(yīng)具備對(duì)稱性。ASM 宏和ASM_EX 宏保證了其構(gòu)造與析構(gòu)過程遵循如下算法。

    構(gòu)造時(shí),其遵循圖9 中的算法。而析構(gòu)時(shí),其遵循圖10中的算法。

    3.4 調(diào)試層的設(shè)計(jì)

    為了方便調(diào)試,OOC-GCC項(xiàng)目中增加了方便調(diào)試程序調(diào)試層,可配合GCC(GNU compiler collection)一起使用。在將調(diào)試層一同編譯時(shí),其會(huì)替換NEW 宏中封裝的malloc函數(shù)以及DELETE宏中封裝的free函數(shù),進(jìn)而可以對(duì)內(nèi)存的分配和釋放以記錄并輸出。如果輸出至文件,還配合Graphviz等工具方便的生成函數(shù)調(diào)用圖表。除此之外,OOC-GCC的調(diào)試層還對(duì)C++的異常捕獲機(jī)制進(jìn)行了簡(jiǎn)單的模擬并提供了運(yùn)行時(shí)間監(jiān)測(cè)等實(shí)用的功能。

    OOC-GCC中關(guān)于類的設(shè)計(jì)和實(shí)現(xiàn)的宏在設(shè)計(jì)上嚴(yán)格的對(duì)稱,并沒有引入任何一個(gè)全局變量,符合C 語言模塊化的設(shè)計(jì)原則。也因此,其對(duì)調(diào)試層沒有任何依賴。如果某些編譯器不支持調(diào)試層提供的一些功能或是需要發(fā)布程序時(shí),只需移除OODbg模塊,使其不參與編譯即可。

    4 與C++的對(duì)比

    為了方便和C++進(jìn)行比較,須設(shè)計(jì)一個(gè)場(chǎng)景。

    假定現(xiàn)有一個(gè)抽象的名為Animal的父類,其包含一個(gè)名為name的成員和一個(gè)名為talk的方法。另有兩個(gè)名為Cat和Dog的子類繼承了Animal這一父類,并各自重寫了父類中定義的talk方法(或重寫了父類中已經(jīng)實(shí)現(xiàn)的talk方法)。

    在實(shí)際測(cè)試的例子中,通過子類來分配內(nèi)存,使用父類的形式來調(diào)用接口來調(diào)用以體現(xiàn)面向?qū)ο笏枷胫械亩鄳B(tài)的特性。一開始,直接在堆內(nèi)存上分配4000個(gè)子類的實(shí)例(Cat類和Dog類隨機(jī)),然后分別調(diào)用其talk方法,最后再依次將其析構(gòu)。

    實(shí)際測(cè)試時(shí)的C代碼以及C++代碼分別如圖11和圖12所示。

    通過對(duì)圖11和圖12的對(duì)比可知,實(shí)際的代碼長(zhǎng)度十分相近。僅僅是需要額外的聲明一個(gè)名為StAnimal的實(shí)例,并通過ST 宏獲取相應(yīng)的虛表結(jié)構(gòu)。

    在ubuntu和windows xp系統(tǒng)上測(cè)試的關(guān)于生成程序體積的數(shù)據(jù)如表2所示(其中數(shù)據(jù)的單位為字節(jié))。

    表2 生成體積對(duì)比

    可以看出,從生成代碼體積方面來說,其和使用C++生成的代碼會(huì)有些差異,但這些差異并不顯著,并且在開啟優(yōu)化選項(xiàng)后,生成的體積有可能比原生的C++占用更小的空間。

    5 實(shí)際的應(yīng)用

    表1中聲明的宏被設(shè)計(jì)成跨平臺(tái)的,不但支持開源的GCC編譯器,也兼容微軟的MSVC編譯器。對(duì)于容量受限或是開發(fā)工具受限的嵌入式平臺(tái),即使無法很好的支持C++等面向?qū)ο蟮木幊陶Z言,也可使用該模型可以大幅提升程序的可讀性和可維護(hù)性。實(shí)際測(cè)試中,AVR,STM32,MSP430 等芯片所使用的編譯器都可以很好的支持。

    另外,利用OOC-GCC 項(xiàng)目中設(shè)計(jì)的對(duì)象模型,還可較為方便的將現(xiàn)有的使用面向?qū)ο笳Z言(如C++,Java,Python等)編寫的代碼移植至純C 語言的平臺(tái),文獻(xiàn)[9]中給出了一個(gè)用Java語言實(shí)現(xiàn)的簡(jiǎn)易解釋器的例子,并且該解釋器的實(shí)現(xiàn)符合設(shè)計(jì)模式中解釋器模式[10]的規(guī)范。

    假定要實(shí)現(xiàn)一個(gè)具備如下功能的解釋器:可以根據(jù)指定的格式向某終端輸出指定格式的字符串,并支持循環(huán)結(jié)構(gòu)。

    圖13 解釋器的示例與運(yùn)行結(jié)果

    圖13中左側(cè)為該解釋器的示例代碼,右側(cè)為對(duì)應(yīng)的正確輸出。該例子中共有7個(gè)關(guān)鍵字。其中PROGRAM 表示程序的開始,與之對(duì)應(yīng)的END 既可用于程序的終結(jié),也可用于循環(huán)結(jié)構(gòu)的終結(jié),而循環(huán)結(jié)構(gòu)用REPEAT 關(guān)鍵字來描述,其后緊跟一個(gè)數(shù)字,用來指示具體循環(huán)的次數(shù)。PRINT 用于輸出指定的字符串,但由于涉及字符的轉(zhuǎn)義,這里使用SPACE關(guān)鍵字來輸出空格,并使用BREAK 關(guān)鍵字來輸出換行,而LINEBREAK 關(guān)鍵字則在輸出一行直線的同時(shí)額外的輸出一個(gè)換行。

    將上述描述,可得出該解釋器定義的BNF范式,具體如圖14所示。

    圖14 解釋器的BNF

    在以解釋器模式進(jìn)行設(shè)計(jì)時(shí),BNF范式中的每一個(gè)節(jié)點(diǎn)都對(duì)應(yīng)一個(gè)類,而每個(gè)類都應(yīng)實(shí)現(xiàn)一個(gè)用于解析代碼并生成需要的AST 樹的接口以及一個(gè)對(duì)已生成的AST 樹進(jìn)行遍歷并執(zhí)行接口。如圖14 所示,該范式由program,command list等5個(gè)關(guān)鍵節(jié)點(diǎn)構(gòu)成,按照解釋器模式的規(guī)定,需為這5個(gè)節(jié)點(diǎn)分別設(shè)計(jì)具備用來解析字符串和用來執(zhí)行抽象語法樹中定義規(guī)則的方法的類。

    圖15 Repeat節(jié)點(diǎn)C實(shí)現(xiàn)

    圖15中展示了使用OOC-GCC配合C 語言以實(shí)現(xiàn)用于循環(huán)控制的Repeat節(jié)點(diǎn)的方式,可以看到,配合OOCGCC,C語言在形式上已經(jīng)有明顯的面向?qū)ο蟮纳?。因?yàn)樵摾虞^為復(fù)雜,完整的實(shí)現(xiàn)可從文獻(xiàn)該例子較為復(fù)雜,完整的例子可參見文獻(xiàn)[5]中獲得。另外,在文獻(xiàn)[9]中給出了該解釋器分別以JAVA 語言以及Python語言實(shí)現(xiàn)的方法。通過對(duì)比可以看出,使用Java語言或Python等原生支持面向?qū)ο笏枷氲木幊陶Z言所編寫的代碼在邏輯上可以和使用C語言編寫的具備OO 風(fēng)格的代碼一一對(duì)應(yīng),但因?yàn)槿狈χT如GC(garbage collector)等特性,在代碼量上,使用C語言編寫的程序仍比使用Java等語言編寫的程序要長(zhǎng)一些。

    6 結(jié)束語

    利用現(xiàn)代C編譯器的特性以及元編程技巧,配合適用于C語言的對(duì)象模型,可以很好的利用面向?qū)ο蟮乃枷?,提升C程序的可重用性。OOC-GCC中的設(shè)計(jì),通過宏的方式簡(jiǎn)化因引入面向?qū)ο笏枷攵a(chǎn)生的附加代碼,無需借助任何第三方代碼生成工具,很好的將OOP 與C 語言像結(jié)合。同時(shí),其靈活的設(shè)計(jì),維持了和C++相似的編碼風(fēng)格,符合C語言模塊化[11]的編碼規(guī)范,不依賴于其它第三方庫,在實(shí)際中可以很好的解決大規(guī)模C 代碼難以復(fù)用,難以管理的問題。

    相較于著名的GObject庫,這是一種輕量級(jí)的實(shí)現(xiàn),并沒有提供復(fù)雜的對(duì)象系統(tǒng),但更加靈活易用,且方便移植。如果需要對(duì)象系統(tǒng)的支持,也可配合GObject,Lua,Python[12]以及Ruby中的對(duì)象系統(tǒng)一起使用。

    為了方便測(cè)試以及推廣文中涉及的代碼。OOC-GCC項(xiàng)目遵循LGPL 3.0開源協(xié)議托管于Google Code,文獻(xiàn)[5]中給出了具體的鏈接,可供讀者測(cè)試,驗(yàn)證和使用。

    [1]Bjarne Stroustrup.Evolving a language in and for the real world:C++1991-2006[C]//HOPL III,Proceedings of the Third ACM SIGPLAN Conference on History of Programming Languages,2007:3-5.

    [2]Bjarne Stroustrup.The Design and evolution of C++[M].QIU Zongyan,transl.China Machine Press,2002:7-37(in Chinese).[Bjarne Stroustrup.C++語言的設(shè)計(jì)和演化[M].裘宗燕,譯.機(jī)械工業(yè)出版社,2002:3-37.]

    [3]ANSI C89Standard,ANSI X3.159-1989[S].

    [4]ISO C99Standard,ISO/IEC 9899:1990[S].

    [5]MENG Fanchao.OOC-GCC project:An easy to use template to write OO program with pure C programming language[CP/OL].http://code.google.com/p/ooc-gcc/,2012(in Chinese).[孟繁超.OOC-GCC[CP/OL].http://code.google.com/p/oocgcc/,2012.]

    [6]Stanley B Lippman.Inside The C++object model[M].HOU Jie,transl.Publishing House of Electronics Industry,2012:1-13(in Chinese).[Stanley B Lippman.深度探索C++對(duì)象模型[M].侯捷,譯.電子工業(yè)出版社,2012:1-13.]

    [7]Andrew Krause.Foundations of GTK+development[M].Apress?,2007:406-456.

    [8]SONG Guowei.GTK +2.0 programming paradigm[M].Tsinghua University Press,2002:174-178(in Chinese).[宋國偉:GTK+2.0 編程范例[M].清華大學(xué)出版社,2002:174-178]

    [9]LIN Xinliang.Notes about design interpreter pattern[J/OL].http://caterpillar.onlyfun.net/Gossip/DesignPattern/InterpreterPattern.htm,2010(in Chinese).[林信良.關(guān)于解釋器模式的筆記[J/OL].http://caterpillar.onlyfun.net/Gossip/DesignPattern/InterpreterPattern.htm,2010.]

    [10]Erich Gamma,Richard Helm,Ralph Johnson,et al.Design patterns:Elements of reusable object-oriented software[M].Addison-Wesley Professional,1995:274-288

    [11]David R Hanson.C interfaces and implementations:Techniques for creating reusable software[M].GUO Xu,transl.Posts &Telecom Press,2011:1-21(in Chinese).[David R Hanson.C語言接口與實(shí)現(xiàn):創(chuàng)建可重用軟件的技術(shù)[M].郭旭,譯.人民郵電出版社,2011:1-21]

    [12]CHEN Ru.Inside python source code:dig into the core of the dynamic languages[M].Publishing House of Electronics Industry,2008:15-28(in Chinese).[陳儒.Python 源碼剖析:深度探索動(dòng)態(tài)語言核心技術(shù)[M].電子工業(yè)出版社,2008:15-28.]

    猜你喜歡
    面向?qū)ο?/a>實(shí)例內(nèi)存
    “春夏秋冬”的內(nèi)存
    面向?qū)ο蟮挠?jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)軟件系統(tǒng)的開發(fā)
    面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
    面向?qū)ο骔eb開發(fā)編程語言的的評(píng)估方法
    完形填空Ⅱ
    完形填空Ⅰ
    面向?qū)ο笮畔⑻崛≈杏跋穹指顓?shù)的選擇
    河南科技(2014年10期)2014-02-27 14:09:03
    基于內(nèi)存的地理信息訪問技術(shù)
    上網(wǎng)本為什么只有1GB?
    国产精品一区二区性色av| 91av网一区二区| 观看免费一级毛片| 欧美极品一区二区三区四区| 欧美另类亚洲清纯唯美| 精品久久久噜噜| 成人精品一区二区免费| 成人高潮视频无遮挡免费网站| 国产老妇女一区| 亚洲 国产 在线| 亚洲精品成人久久久久久| 我的女老师完整版在线观看| 中文字幕熟女人妻在线| 亚洲av一区综合| 给我免费播放毛片高清在线观看| 麻豆成人午夜福利视频| 中出人妻视频一区二区| 成人亚洲精品av一区二区| 乱码一卡2卡4卡精品| 在线播放无遮挡| 午夜福利在线观看免费完整高清在 | 国产爱豆传媒在线观看| 999久久久精品免费观看国产| 国内精品一区二区在线观看| 成人精品一区二区免费| 中文资源天堂在线| 日韩,欧美,国产一区二区三区 | 少妇被粗大猛烈的视频| 日韩欧美一区二区三区在线观看| 天堂动漫精品| 久久精品影院6| 国产精品自产拍在线观看55亚洲| 69人妻影院| 春色校园在线视频观看| 亚洲第一电影网av| 欧美日韩瑟瑟在线播放| 久久精品国产鲁丝片午夜精品 | 国产老妇女一区| 网址你懂的国产日韩在线| 三级男女做爰猛烈吃奶摸视频| 亚洲欧美日韩东京热| 一级黄色大片毛片| 小说图片视频综合网站| 一区二区三区激情视频| av在线蜜桃| 在线a可以看的网站| 色哟哟哟哟哟哟| 男女下面进入的视频免费午夜| 亚洲av成人av| 日本爱情动作片www.在线观看 | 在线看三级毛片| 国产精品伦人一区二区| 午夜福利欧美成人| 国产精品爽爽va在线观看网站| a在线观看视频网站| 亚洲av电影不卡..在线观看| 少妇的逼水好多| 亚洲第一区二区三区不卡| av国产免费在线观看| 亚洲精品国产成人久久av| 最后的刺客免费高清国语| 色av中文字幕| a级一级毛片免费在线观看| 黄色一级大片看看| 神马国产精品三级电影在线观看| 免费不卡的大黄色大毛片视频在线观看 | 国产伦精品一区二区三区四那| 日韩在线高清观看一区二区三区 | 一进一出好大好爽视频| 国产免费av片在线观看野外av| 色吧在线观看| a级毛片免费高清观看在线播放| 午夜老司机福利剧场| 在线免费观看不下载黄p国产 | 神马国产精品三级电影在线观看| 久久精品夜夜夜夜夜久久蜜豆| 草草在线视频免费看| 国产精品人妻久久久影院| 深爱激情五月婷婷| 国产成人影院久久av| 欧美3d第一页| 国产色爽女视频免费观看| 欧美激情国产日韩精品一区| 亚洲欧美日韩高清在线视频| 99久久精品一区二区三区| 亚洲人成网站高清观看| 日本熟妇午夜| 大型黄色视频在线免费观看| 亚洲美女视频黄频| av在线天堂中文字幕| 最近在线观看免费完整版| 成熟少妇高潮喷水视频| 99热这里只有精品一区| 别揉我奶头 嗯啊视频| 18+在线观看网站| 一个人看的www免费观看视频| 99久久久亚洲精品蜜臀av| 国产精品av视频在线免费观看| 成年女人永久免费观看视频| 男女视频在线观看网站免费| 非洲黑人性xxxx精品又粗又长| 国产在视频线在精品| 两性午夜刺激爽爽歪歪视频在线观看| 99久久久亚洲精品蜜臀av| 国产精品av视频在线免费观看| 搡老妇女老女人老熟妇| 亚洲欧美日韩高清专用| 日日摸夜夜添夜夜添av毛片 | a级毛片a级免费在线| 国产真实乱freesex| 免费人成在线观看视频色| 国内少妇人妻偷人精品xxx网站| 久久精品综合一区二区三区| 校园春色视频在线观看| 日本-黄色视频高清免费观看| 长腿黑丝高跟| 麻豆精品久久久久久蜜桃| 久久久久久久久中文| 日本与韩国留学比较| 制服丝袜大香蕉在线| 午夜福利成人在线免费观看| 女同久久另类99精品国产91| 久久久久久大精品| 九九爱精品视频在线观看| 国产视频一区二区在线看| 天堂√8在线中文| 亚洲欧美激情综合另类| 国产老妇女一区| 国产亚洲91精品色在线| 国产69精品久久久久777片| 日韩,欧美,国产一区二区三区 | 精品久久久久久久人妻蜜臀av| 日本五十路高清| 日日干狠狠操夜夜爽| 日本在线视频免费播放| 男女啪啪激烈高潮av片| 男女视频在线观看网站免费| 午夜视频国产福利| 国产高清激情床上av| 高清毛片免费观看视频网站| 亚洲av中文字字幕乱码综合| 在线观看一区二区三区| 久久久色成人| 69av精品久久久久久| 国产极品精品免费视频能看的| 日韩中字成人| 欧美性猛交黑人性爽| 国产成人影院久久av| 欧美高清性xxxxhd video| 中国美白少妇内射xxxbb| 国产乱人视频| 99久久中文字幕三级久久日本| 国产精品久久久久久av不卡| 在线看三级毛片| 日日摸夜夜添夜夜添小说| 日本黄大片高清| 国产精品,欧美在线| 色播亚洲综合网| 啦啦啦啦在线视频资源| 韩国av一区二区三区四区| 波多野结衣高清无吗| 国产亚洲91精品色在线| 人妻少妇偷人精品九色| 国产精品电影一区二区三区| 国产一区二区在线观看日韩| 亚洲人与动物交配视频| .国产精品久久| АⅤ资源中文在线天堂| 欧美中文日本在线观看视频| 成人av一区二区三区在线看| 日韩av在线大香蕉| 国产av麻豆久久久久久久| 午夜福利18| 啪啪无遮挡十八禁网站| 免费人成在线观看视频色| 亚洲成人中文字幕在线播放| 国产亚洲精品久久久com| 中文字幕av在线有码专区| 欧美日韩精品成人综合77777| 日韩高清综合在线| 成人精品一区二区免费| 美女黄网站色视频| 午夜福利成人在线免费观看| 波多野结衣高清无吗| 国产精品久久久久久av不卡| 日日摸夜夜添夜夜添av毛片 | 欧美另类亚洲清纯唯美| 我的老师免费观看完整版| 欧美性感艳星| 联通29元200g的流量卡| 国产精品av视频在线免费观看| 简卡轻食公司| 99视频精品全部免费 在线| 免费高清视频大片| 校园春色视频在线观看| 日本免费一区二区三区高清不卡| 精品久久久久久久末码| 亚洲,欧美,日韩| 高清日韩中文字幕在线| 国产v大片淫在线免费观看| 三级男女做爰猛烈吃奶摸视频| 欧美日韩中文字幕国产精品一区二区三区| 午夜久久久久精精品| 亚洲精品亚洲一区二区| 欧美成人一区二区免费高清观看| 国产伦在线观看视频一区| 国产91精品成人一区二区三区| 中文字幕精品亚洲无线码一区| 黄色配什么色好看| 久久久久久大精品| 天堂网av新在线| 深夜a级毛片| 99久久精品国产国产毛片| 在线国产一区二区在线| 国产精品av视频在线免费观看| 亚洲国产色片| 小说图片视频综合网站| 草草在线视频免费看| 日韩高清综合在线| 免费看光身美女| 日本与韩国留学比较| 啪啪无遮挡十八禁网站| 一个人看视频在线观看www免费| 国产私拍福利视频在线观看| 91麻豆av在线| 嫩草影视91久久| 在线观看午夜福利视频| 看免费成人av毛片| 床上黄色一级片| 欧美高清性xxxxhd video| 国产三级中文精品| 久久国内精品自在自线图片| 不卡视频在线观看欧美| 淫秽高清视频在线观看| 啦啦啦观看免费观看视频高清| 少妇被粗大猛烈的视频| 成人鲁丝片一二三区免费| 国产精品一区二区性色av| 99国产精品一区二区蜜桃av| 亚洲,欧美,日韩| 亚洲熟妇中文字幕五十中出| 在线播放国产精品三级| 精品久久久久久久久亚洲 | 成人三级黄色视频| 在线免费观看不下载黄p国产 | 久久精品国产亚洲网站| 亚洲国产高清在线一区二区三| 精品免费久久久久久久清纯| 中文资源天堂在线| 欧美性猛交黑人性爽| 乱码一卡2卡4卡精品| 日韩欧美精品v在线| av女优亚洲男人天堂| 国产白丝娇喘喷水9色精品| 91久久精品国产一区二区三区| av黄色大香蕉| 无遮挡黄片免费观看| 麻豆国产av国片精品| h日本视频在线播放| 国产精品精品国产色婷婷| 又黄又爽又刺激的免费视频.| 日本色播在线视频| 韩国av在线不卡| 精品一区二区三区人妻视频| 毛片一级片免费看久久久久 | 国产精品三级大全| 亚洲在线观看片| 91av网一区二区| 18禁裸乳无遮挡免费网站照片| 日韩强制内射视频| 嫩草影院入口| 老司机福利观看| 小说图片视频综合网站| 午夜福利欧美成人| 国产高清有码在线观看视频| 九九爱精品视频在线观看| 全区人妻精品视频| 国内揄拍国产精品人妻在线| 欧美成人a在线观看| 久久久久精品国产欧美久久久| 国产极品精品免费视频能看的| 久久精品综合一区二区三区| 啦啦啦啦在线视频资源| 一个人看的www免费观看视频| 亚洲av美国av| 日韩 亚洲 欧美在线| 18+在线观看网站| 色噜噜av男人的天堂激情| 嫁个100分男人电影在线观看| 大又大粗又爽又黄少妇毛片口| 亚洲精品在线观看二区| 嫩草影院新地址| 国产爱豆传媒在线观看| 91久久精品国产一区二区三区| 色av中文字幕| av天堂中文字幕网| 亚洲精品亚洲一区二区| 亚洲三级黄色毛片| 身体一侧抽搐| 国国产精品蜜臀av免费| 亚洲一区高清亚洲精品| 两性午夜刺激爽爽歪歪视频在线观看| 国产精品久久久久久精品电影| 毛片女人毛片| 波多野结衣巨乳人妻| 精品人妻1区二区| av视频在线观看入口| 久久久精品大字幕| 婷婷精品国产亚洲av在线| 日韩av在线大香蕉| 久久久精品大字幕| 国产男靠女视频免费网站| 岛国在线免费视频观看| 国产aⅴ精品一区二区三区波| 老熟妇仑乱视频hdxx| 欧美在线一区亚洲| 联通29元200g的流量卡| 久久精品久久久久久噜噜老黄 | 黄色欧美视频在线观看| 久久99热这里只有精品18| 99久国产av精品| 午夜影院日韩av| 99热6这里只有精品| 精品一区二区三区视频在线观看免费| 亚洲va在线va天堂va国产| 国产精品98久久久久久宅男小说| 国产精品久久视频播放| 三级男女做爰猛烈吃奶摸视频| 99国产精品一区二区蜜桃av| 国内精品一区二区在线观看| 免费人成视频x8x8入口观看| 婷婷亚洲欧美| 亚洲五月天丁香| 伦理电影大哥的女人| 亚洲七黄色美女视频| 熟妇人妻久久中文字幕3abv| 日本爱情动作片www.在线观看 | 亚洲成人中文字幕在线播放| 成熟少妇高潮喷水视频| 久久亚洲精品不卡| 亚洲av电影不卡..在线观看| 日韩中字成人| 日本三级黄在线观看| 精华霜和精华液先用哪个| 亚洲一区高清亚洲精品| av国产免费在线观看| 又爽又黄无遮挡网站| 亚洲精品一区av在线观看| 51国产日韩欧美| 99久久久亚洲精品蜜臀av| 精品欧美国产一区二区三| 亚洲成人免费电影在线观看| 久久久久国内视频| 精品一区二区三区视频在线观看免费| 麻豆国产av国片精品| 国产精品一区二区性色av| 男人和女人高潮做爰伦理| 日韩中文字幕欧美一区二区| 久久午夜亚洲精品久久| 亚洲一区二区三区色噜噜| 给我免费播放毛片高清在线观看| 悠悠久久av| av女优亚洲男人天堂| 亚洲成人久久性| 久久午夜亚洲精品久久| 久久热精品热| 两人在一起打扑克的视频| av中文乱码字幕在线| 很黄的视频免费| 久久久午夜欧美精品| 午夜激情欧美在线| 无遮挡黄片免费观看| 又爽又黄无遮挡网站| 日本色播在线视频| 久久精品国产亚洲av天美| 99久久精品热视频| 国产精品一区二区免费欧美| 长腿黑丝高跟| 18+在线观看网站| 极品教师在线免费播放| 伦精品一区二区三区| 一级毛片久久久久久久久女| 欧美激情久久久久久爽电影| 色精品久久人妻99蜜桃| 永久网站在线| 无人区码免费观看不卡| 日韩欧美精品v在线| 中出人妻视频一区二区| 国产伦精品一区二区三区视频9| 高清在线国产一区| 波多野结衣高清作品| 成人综合一区亚洲| 亚洲精品国产成人久久av| 欧美高清成人免费视频www| 俄罗斯特黄特色一大片| 国内精品一区二区在线观看| 97热精品久久久久久| 欧美区成人在线视频| 国产亚洲av嫩草精品影院| 我的老师免费观看完整版| 精品人妻熟女av久视频| 亚洲精品一区av在线观看| 欧美中文日本在线观看视频| 久久亚洲精品不卡| 亚洲av成人精品一区久久| 五月玫瑰六月丁香| 麻豆一二三区av精品| 91久久精品国产一区二区三区| 欧美日本视频| 丝袜美腿在线中文| 亚洲电影在线观看av| 久久久色成人| 国产av在哪里看| 免费看av在线观看网站| 久久这里只有精品中国| 久久久精品大字幕| 亚洲狠狠婷婷综合久久图片| 又黄又爽又免费观看的视频| 俺也久久电影网| 1000部很黄的大片| 桃色一区二区三区在线观看| avwww免费| 亚洲天堂国产精品一区在线| 麻豆国产97在线/欧美| 在线国产一区二区在线| 两个人视频免费观看高清| 欧美最新免费一区二区三区| 日本欧美国产在线视频| 日韩精品青青久久久久久| 欧美中文日本在线观看视频| www.色视频.com| av在线老鸭窝| 露出奶头的视频| 老司机深夜福利视频在线观看| 少妇猛男粗大的猛烈进出视频 | 成人高潮视频无遮挡免费网站| 日本 欧美在线| 亚洲成人免费电影在线观看| 欧美xxxx性猛交bbbb| 国产男靠女视频免费网站| 成熟少妇高潮喷水视频| 久久久久久久久久黄片| 波多野结衣巨乳人妻| 欧美日韩乱码在线| 麻豆成人av在线观看| 国产亚洲av嫩草精品影院| 国产乱人视频| 老司机福利观看| 高清日韩中文字幕在线| 久久久久久久久大av| 久久九九热精品免费| 22中文网久久字幕| 欧美中文日本在线观看视频| 国产一区二区在线观看日韩| 国产在线精品亚洲第一网站| 成人特级av手机在线观看| 内射极品少妇av片p| 国产精品久久视频播放| 日本免费一区二区三区高清不卡| 老司机午夜福利在线观看视频| 日本 av在线| 国产精品无大码| 久久午夜亚洲精品久久| 又紧又爽又黄一区二区| 国内毛片毛片毛片毛片毛片| 欧美高清成人免费视频www| 国产成人福利小说| 中文在线观看免费www的网站| 亚洲专区中文字幕在线| 天天躁日日操中文字幕| 色综合色国产| 中文字幕熟女人妻在线| 国产激情偷乱视频一区二区| 免费不卡的大黄色大毛片视频在线观看 | 久久精品久久久久久噜噜老黄 | 亚洲中文日韩欧美视频| 亚洲精品色激情综合| 国产久久久一区二区三区| 18禁黄网站禁片免费观看直播| 天堂影院成人在线观看| 国产一区二区亚洲精品在线观看| 日韩国内少妇激情av| a在线观看视频网站| 嫩草影视91久久| 亚洲av电影不卡..在线观看| 免费高清视频大片| 免费看光身美女| 日本一二三区视频观看| 久久欧美精品欧美久久欧美| 久久精品国产亚洲av天美| 床上黄色一级片| 日韩国内少妇激情av| 桃红色精品国产亚洲av| 亚洲真实伦在线观看| 亚洲久久久久久中文字幕| 亚洲自偷自拍三级| 特级一级黄色大片| 禁无遮挡网站| 亚洲成人精品中文字幕电影| 国产大屁股一区二区在线视频| 91久久精品国产一区二区三区| 99久久九九国产精品国产免费| 国产欧美日韩一区二区精品| 亚洲成人精品中文字幕电影| 男女那种视频在线观看| 在线观看美女被高潮喷水网站| 精品不卡国产一区二区三区| 韩国av在线不卡| 黄色女人牲交| 赤兔流量卡办理| 夜夜爽天天搞| 97碰自拍视频| 国产久久久一区二区三区| 女生性感内裤真人,穿戴方法视频| 看免费成人av毛片| 午夜精品在线福利| 亚洲成人中文字幕在线播放| 成人综合一区亚洲| 久久6这里有精品| 国产一级毛片七仙女欲春2| 女人被狂操c到高潮| 国产精品国产三级国产av玫瑰| 欧美日本视频| 亚洲欧美清纯卡通| 国产真实伦视频高清在线观看 | 综合色av麻豆| 免费av不卡在线播放| 国产成人av教育| 日韩精品有码人妻一区| 国产精品电影一区二区三区| 69人妻影院| 1000部很黄的大片| 欧美极品一区二区三区四区| 精品久久久久久久久av| 国产黄片美女视频| x7x7x7水蜜桃| 99久久中文字幕三级久久日本| 中国美白少妇内射xxxbb| 亚洲va在线va天堂va国产| 人人妻人人澡欧美一区二区| 真实男女啪啪啪动态图| 免费大片18禁| 久久精品91蜜桃| 亚洲精品456在线播放app | 老司机深夜福利视频在线观看| 久久九九热精品免费| 国产 一区精品| 淫妇啪啪啪对白视频| 嫩草影院新地址| 国产高潮美女av| 免费黄网站久久成人精品| 亚洲av日韩精品久久久久久密| 欧美最新免费一区二区三区| 麻豆精品久久久久久蜜桃| 精品乱码久久久久久99久播| 日本熟妇午夜| 亚洲成人久久爱视频| 久久精品国产亚洲av香蕉五月| 欧美高清成人免费视频www| 久久久久九九精品影院| 久久国产乱子免费精品| 啦啦啦韩国在线观看视频| 夜夜爽天天搞| 日本五十路高清| 久久久久久久亚洲中文字幕| 国产高清有码在线观看视频| 大型黄色视频在线免费观看| 精品人妻一区二区三区麻豆 | 嫁个100分男人电影在线观看| 日韩欧美精品v在线| 大又大粗又爽又黄少妇毛片口| 亚洲国产精品成人综合色| 国产爱豆传媒在线观看| 高清在线国产一区| 日韩欧美免费精品| 日本黄大片高清| 亚洲久久久久久中文字幕| or卡值多少钱| 国产一级毛片七仙女欲春2| 成人亚洲精品av一区二区| 成人特级av手机在线观看| 国产亚洲精品久久久久久毛片| 夜夜夜夜夜久久久久| 亚洲熟妇中文字幕五十中出| 亚洲色图av天堂| x7x7x7水蜜桃| 精品午夜福利在线看| 老熟妇乱子伦视频在线观看| 美女 人体艺术 gogo| 99热只有精品国产| 成人国产综合亚洲| 亚洲人成伊人成综合网2020| 国产成年人精品一区二区| 99久久九九国产精品国产免费| 亚洲人成伊人成综合网2020| 国产成年人精品一区二区| 免费无遮挡裸体视频| 夜夜夜夜夜久久久久| 国产av不卡久久| 麻豆成人av在线观看| 老司机午夜福利在线观看视频| 少妇的逼好多水| 亚洲经典国产精华液单| 欧美3d第一页| 琪琪午夜伦伦电影理论片6080| 亚洲中文字幕日韩| 校园春色视频在线观看| 听说在线观看完整版免费高清| 国产精品一区二区性色av| 久久久久久久久久久丰满 | 亚洲av中文字字幕乱码综合| 久久久久九九精品影院| 男人舔女人下体高潮全视频| 免费av观看视频| 麻豆成人午夜福利视频|