青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流

     公園2003年,秋。
     西安。
     晴,黃歷上寫(xiě)——易出行,交友。
     交大東二樓。
     笑容,邪邪的笑容浮現(xiàn)在他英俊自信驕傲的臉上……
     
     (以下轉(zhuǎn)正常)
     今天是新碩士報(bào)道后的第一天,小P一早就高高興興的向教研室走去。“嗯,應(yīng)該可以見(jiàn)到有趣的家伙吧。”他想。他很是期待見(jiàn)到新同學(xué)和結(jié)交新朋友。到Z老板辦公室和老板打過(guò)招呼后,他向?qū)嶒?yàn)室走去。“聽(tīng)說(shuō)一個(gè)工作了3年的家伙已經(jīng)到了,不知道是不是邪惡大叔啊。”小正太一邊走一邊邪惡的想著。推門(mén)進(jìn)去發(fā)現(xiàn)一個(gè)高大沉穩(wěn)老練的男人正在收拾電腦桌,呵呵,他的美人尖還透露出他的智慧。
     “你好,我叫小P。”
     男人回過(guò)頭:“呵呵,你好,我叫陳老C,你長(zhǎng)得還真是年輕啊。”
     “呵呵,幼稚,幼稚而已。”
     “你是本科后直接上研的吧?”
     “是啊是啊,聽(tīng)說(shuō)你工作了3年?”
     “沒(méi)錯(cuò),我是96級(jí)的,工作3年以后又回學(xué)校來(lái)啦……”
     ……
     “……我做過(guò)一些項(xiàng)目,有用C做的,有用C++做的……”老C和小P聊的不錯(cuò),感覺(jué)還挺投緣的。
     “哦,我也用C寫(xiě)過(guò)一些小的程序,C++課程也學(xué)習(xí)過(guò),成績(jī)還挺不錯(cuò)的。”小P開(kāi)始吹牛了,“C++是C語(yǔ)言在面向?qū)ο蠓矫娴陌l(fā)展……”
     “噢,這么說(shuō)也沒(méi)有什么錯(cuò),開(kāi)始的時(shí)候C++的確是C在面向?qū)ο蠓矫娴陌l(fā)展,但是……”老C開(kāi)始給小P上課了,“現(xiàn)在C++其實(shí)是一個(gè)語(yǔ)言的聯(lián)邦,在它的內(nèi)部存在4種不同的語(yǔ)言……”
     “是嗎?”
     “是的,這4種語(yǔ)言包括C——這是理所當(dāng)然的——同時(shí)還包括面向?qū)ο蟛糠郑瑃emplate部分和STL部分,每個(gè)部分都有其獨(dú)特的考慮問(wèn)題的方式,有著自己獨(dú)到的習(xí)語(yǔ)和風(fēng)格……”
     “習(xí)語(yǔ)?風(fēng)格?”
     “是的。”老C解釋道,“我們學(xué)習(xí)編程語(yǔ)言就像學(xué)習(xí)一般的語(yǔ)言一樣——比如英語(yǔ)——如果你只是掌握了英語(yǔ)的基本語(yǔ)法你可以和英國(guó)人或者美國(guó)人自由的交流嗎?”
     “我想應(yīng)該不行吧,我想我可能不理解他們所說(shuō)的……比如詞匯……”小P回答道。
     “對(duì),你有沒(méi)有發(fā)現(xiàn)當(dāng)我們即使掌握了某種語(yǔ)言的語(yǔ)法也無(wú)法和其他人進(jìn)行有效的交流的時(shí)候,就是說(shuō)你對(duì)某段語(yǔ)言所表達(dá)的意思不了解的時(shí)候,一般都是如何不了解的?”
     “哦?這個(gè)我還沒(méi)有仔細(xì)考慮過(guò)。讓我想想……”小P以手撐頭,陷入沉思狀……“我試著總結(jié)一下,應(yīng)當(dāng)是對(duì)以下幾方面不了解。”小P開(kāi)始噴了。
  1. 對(duì)語(yǔ)言的基本單元無(wú)法理解,在英語(yǔ)里面應(yīng)當(dāng)是詞匯。
  2. 對(duì)句子無(wú)法理解,尤其是一些句型不了解,比如英語(yǔ)里面的too...to句型。
  3. 如果單詞理解了,句子也理解了,但是還是無(wú)法理解一段語(yǔ)言,那么應(yīng)當(dāng)是思維方式與說(shuō)這段話的人有距離。
     “沒(méi)錯(cuò)!”老C稱(chēng)贊道,“你還真是聰明啊,這么短時(shí)間就可以總結(jié)個(gè)子丑寅卯出來(lái)。”
     “呵呵,哪里哪里,我就是比較油菜而已……”
     “哈哈,那我們就拿你的總結(jié)與C++對(duì)比一下吧。”
  1. 單詞就像C++里面的慣用習(xí)語(yǔ),比如virtual constructor或者PIMPL等
  2. 句型就像設(shè)計(jì)模式。
  3. 思維方法就是語(yǔ)言風(fēng)格。
     “不懂,什么是virtual constructor和PIMPL?什么又是設(shè)計(jì)模式?語(yǔ)言風(fēng)格又是什么東東?”小P開(kāi)始懷疑老C是火星人,他說(shuō)的是漢語(yǔ)嗎?
     “沒(méi)有關(guān)系,以后我們還有機(jī)會(huì)來(lái)討論那些C++常用的習(xí)語(yǔ),現(xiàn)在我們就幾個(gè)常見(jiàn)的思維方式,也就是語(yǔ)言風(fēng)格的問(wèn)題舉幾個(gè)簡(jiǎn)單的例子吧。”老C從實(shí)驗(yàn)室的角落拉過(guò)來(lái)一塊白板,又找出一支彩筆開(kāi)始在白板上畫(huà)了起來(lái)。
     “我這里現(xiàn)在有一個(gè)簡(jiǎn)單的問(wèn)題,”老C在白板的上面寫(xiě)下幾行文字。

設(shè)計(jì)一段代碼,這段代碼需要根據(jù)不同的輸入在屏幕上打印對(duì)應(yīng)的水果名稱(chēng)

     “能具體一些嗎?”小P問(wèn)。
     “可以啊,我寫(xiě)開(kāi)始的一段代碼,你補(bǔ)全如何?”
     “想考我嗎?沒(méi)有問(wèn)題……呵呵。”
     老C開(kāi)始在白板上寫(xiě)代碼,“我們意思意思就可以了,在這里我們使用C語(yǔ)言,所以是C語(yǔ)言的風(fēng)格”。
     “C?這個(gè)我還比較擅長(zhǎng)。”小P現(xiàn)在有些想露一手。
     “好吧,看看我們?nèi)绾瓮瓿伞?#8221;老C刷刷幾筆寫(xiě)下了如下代碼。
typedef enum tagFRUIT{ORANGE, APPLE, BANANA} FRUIT;
void PrintFruitName(FRUIT fruit)
{
}
     “嗯,容易……”小P開(kāi)始完成PrintFruitName()函數(shù)。
void PrintFruitName(FRUIT fruit)
{
    switch (
fruit)
    {
    case ORANGE:
        pirntf("orange\n");
    break;
   
    case APPLE:
        printf("apple\n");
    break;
   
    case BANANA:
        printf("banana\n");
    break;
   
    default:
        return;  
    }
}

      “好了,我們的算法是這樣的,一個(gè)函數(shù)從某處——無(wú)論什么地方,鍵盤(pán)輸入也好,某個(gè)配置文件也好——讀到了需要輸出的蔬果信息,然后調(diào)用我們的打印函數(shù)將水果名稱(chēng)打印出來(lái)。”老C說(shuō)完寫(xiě)下了完整的main()函數(shù)。

int main()
{
    FRUIT fruit;
   
    /* Get the information of fruit. */
    fruit = GetFruitInfo();
    /* Print the name of the fruit. */
    PrintFruitName(fruit);

    return 0; 
}

     “Perfect!”小P高興的說(shuō)道。
     “嗯,只能說(shuō)不錯(cuò)而已,完美還談不上。”老C點(diǎn)點(diǎn)頭,“如果我們希望添加一種新的水果到我們的系統(tǒng)里面,比如梨,pear,怎么辦?”
     “好辦啊,我只要在FRUIT的枚舉類(lèi)型中添加PEAR,然后在PrintFruitName()函數(shù)中添加一個(gè)case分支就可以了,有什么復(fù)雜的?”
     “呵呵,注意你剛才用了兩個(gè)添加的詞語(yǔ),表示你有兩次添加的動(dòng)作……”
     “這又有什么不可以的呢?”
     “沒(méi)有什么不可以,只和問(wèn)題的規(guī)模有關(guān),但是,”老C停頓一下,“這里我想強(qiáng)調(diào)的是語(yǔ)言風(fēng)格的問(wèn)題……”
     “?”小P開(kāi)始集中注意力。
     “因?yàn)槲覀儫o(wú)法擺脫語(yǔ)言對(duì)思維方式的影響,反過(guò)來(lái)思維方式表現(xiàn)在代碼上就是風(fēng)格,”老C指指白板,“比如這個(gè)PrintFruitName()函數(shù),就是一個(gè)很典型的C風(fēng)格函數(shù)。”
     “為什么呢?”
     “因?yàn)樗?#8230;…”老C嘆了口氣,“我不知道怎么形容,只好說(shuō)的陳詞濫調(diào)一些——因?yàn)樗嫦蜻^(guò)程。”老C撓撓頭,“不,確切的說(shuō)它掌握了太多的細(xì)節(jié)……”
     “聽(tīng)不懂……”小P有些囧。
     “好吧,那么讓我們來(lái)?yè)Q個(gè)角度看問(wèn)題。假如你現(xiàn)在是個(gè)測(cè)試工程師……什么叫測(cè)試工程師?就是保證代碼質(zhì)量的……”老C面對(duì)一個(gè)技術(shù)幼齒有些郁悶,“他們按照一定的步驟對(duì)代碼進(jìn)行測(cè)試,包括檢視代碼、使用特殊輸入數(shù)據(jù)檢驗(yàn)代碼質(zhì)量等等……”老C開(kāi)始結(jié)巴了,“你就認(rèn)為是專(zhuān)門(mén)檢查代碼的算了。”
     “好吧,然后呢?”
     “假如你剛才已經(jīng)檢查過(guò)我們寫(xiě)下的所有代碼,并認(rèn)為它們都是正確的,這個(gè)時(shí)候有個(gè)家伙說(shuō)因?yàn)樾枨笞儎?dòng)需要增加PEAR到系統(tǒng)中,并且需要改動(dòng)水果名稱(chēng)的輸出格式,他剛剛更改了PrintFruitName()函數(shù),需要你去做檢查,你會(huì)怎么辦?”
     “涼拌!讓他把他改過(guò)的部分圈出來(lái),我看他改的對(duì)不對(duì)。”
     “哦,這樣會(huì)有問(wèn)題的……”
     “什么問(wèn)題?”
     “假如這個(gè)家伙是500/2,他在增加case PEAR:分支到BANANA下面的時(shí)候不小心刪除了BANANA分支的break……”
     “餓滴神啊,這樣在函數(shù)輸入形參如果是BANANA,那么結(jié)果真是出人意料啊!”
     “是啊是啊,所以……”
     “所以如果是由我檢查代碼,我可不能聽(tīng)信那個(gè)家伙的話,只看他自以為修改過(guò)的部分,是吧。”小P開(kāi)始有些理解了。
     “是啊,你必須把今天早上做過(guò)的所有檢查再做一遍,來(lái)確保那個(gè)家伙沒(méi)有搗亂……”
     “啊,那么重復(fù)的工作量豈不是很大?”小P開(kāi)始覺(jué)得測(cè)試工程師個(gè)個(gè)都是雙眼通紅,走路帶晃的ggmm,“那么我們有什么好辦法呢?”
     “在C語(yǔ)言范圍內(nèi)還是有一些方法的……”老C說(shuō)道,“只是都比較麻煩而已。”
     “是么?讓我想想……”小P開(kāi)始開(kāi)動(dòng)腦筋,幾分鐘后,他有些失望,“我想不出什么好方法,老C,你有什么辦法?”
     “我們可以使用回調(diào)函數(shù),或者使用指向函數(shù)的指針……”
     “?”小P眼睛成星星狀,“怎么做?”
     老C開(kāi)始挽袖子,并在白板上涂涂抹抹。

typedef enum tagFRUIT{ORANGE, APPLE, BANANA} FRUIT;
typedef void (*PRINT_PROC)(char*);
typedef struct tagFRUIT_INFO
{
    FRUIT               fruit_;   
   
const char* const   name_;
}FRUIT_INFO;

void DoPrintFruitName(char* name)
{
    printf("%s\n", name);
}

void DoPrintFruitNameCompany(char* name)
{
    printf("XJTU's %s\n", name);
}

const FRUIT_INFO g_fruitInfo[] =
{
    ORANGE,    "orange"
    ,APPLE,    "apple"
    ,BANANA,   "banana"
};

void
PrintFruitName(FRUIT fruit, PRINT_PROC printProc)
{
    int i;
   
    for (
         i = 0;
         i < (sizeof(g_fruitInfo)/sizeof(g_fruitInfo[0]));
         ++i
        )
    {
        if (g_fruitInfo[i].fruit_ == fruit)
        {
            (*printProc)(g_fruitInfo[i].name_);
        }
    }
}

int main()
{
    FRUIT fruit;
   
    /* Get the information of fruit. */
    fruit = GetFruitInfo();
    /* Print the name of the fruit. */
    if (/* Print fruit's company. */)
    {
        PrintFruitName(fruit,
DoPrintFruitNameCompany);
    }
    else
    {
        PrintFruitName(
fruit, DoPrintFruitName)
    }

    return 0;
}


     “這樣,”陳老C解釋道,“如果我需要增加PEAR到系統(tǒng)中,只需要在g_fruitInfo的表格中增加一行就可以了。而且程序可以根據(jù)外部的需求決定是否輸輸出產(chǎn)水果的公司,當(dāng)然這些都是說(shuō)明性的,用偽代碼代替了。”
     “*^*”小P看的有些眩暈,“我有些頭暈,像暈車(chē)……”
     “沒(méi)有關(guān)系,只是你不熟悉罷了。”老C摸著下巴,“這就是我說(shuō)的風(fēng)格問(wèn)題,因?yàn)樗伎紗?wèn)題的方式不同導(dǎo)致代碼的風(fēng)格看起一時(shí)難以接受而已。”
     “哦?看來(lái)只是習(xí)慣問(wèn)題?那么我再看看……”克服了暈車(chē)般的頭痛,小P又看了幾遍代碼,感覺(jué)依照自己的C基礎(chǔ),看懂是沒(méi)有問(wèn)題的,畢竟自己還是很油菜的。“的確是習(xí)慣問(wèn)題,但是為什么老C會(huì)這樣思考問(wèn)題呢?”小P想。
     “因?yàn)樾畔㈦[藏……”
     “你怎么知道我在想什么?”
     “因?yàn)槟阍谧匝宰哉Z(yǔ)!”老C很是囧,“我們來(lái)看看現(xiàn)在的代碼吧,它與我們第一版的代碼區(qū)別在于信息的隱藏和信息的外部存儲(chǔ)。原來(lái)的PrintFruitName()信息都存儲(chǔ)在函數(shù)內(nèi)部,即函數(shù)需要知道具體的FRUIT枚舉才可以做出相應(yīng)的輸出,而且輸出數(shù)據(jù)的格式信息也存儲(chǔ)在函數(shù)中。這樣這個(gè)函數(shù)就和我們的需求緊密結(jié)合,就是說(shuō)如果我們的需求——水果類(lèi)型和輸出名稱(chēng)的信息及格式——任何一個(gè)發(fā)生變化,那么這個(gè)函數(shù)體本身也必須發(fā)生變化,代價(jià)就是——寫(xiě)代碼的人和測(cè)試代碼的人都強(qiáng)烈拒絕新的需求變化。而如果我們把具體信息對(duì)PrintFruitName()隱藏,使得函數(shù)只知道在一個(gè)表格中尋找對(duì)應(yīng)的類(lèi)型,然后根據(jù)自己接口處的函數(shù)指針調(diào)用格式化輸出函數(shù),那么在需求發(fā)生變化時(shí),我們只需要修改具體保存信息的數(shù)據(jù)格式——比如g_fruitInfo表格,而無(wú)需修改函數(shù)體本身;更炫一點(diǎn)兒的是,我們還可以使用宏把對(duì)g_fruitInfo表格的操作封裝起來(lái),防止維護(hù)人員對(duì)g_fruitInfo表格進(jìn)行誤操作……但是考慮到你的承受能力,我們以后再談?wù)撨@個(gè)話題。這樣,就產(chǎn)生了相對(duì)穩(wěn)定的結(jié)構(gòu)——PrintFruitName()函數(shù)體,但是此設(shè)計(jì)又沒(méi)有拒絕維護(hù)人員根據(jù)需求進(jìn)行變更……
     “哦,讓我再想想……”小P又回頭去看代碼,“這次感覺(jué)好多了,但是,”小P開(kāi)始惡狠狠的對(duì)老C說(shuō),“你一早就這么寫(xiě)出來(lái)得了,為什么還要我浪費(fèi)時(shí)間啊!”
     “我又沒(méi)有說(shuō)你寫(xiě)得不好,如果是我第一次寫(xiě),我也會(huì)寫(xiě)得和你一樣!”
     “?”
     “一切都由需求而定!我們一開(kāi)始時(shí)并不知道哪些需求會(huì)發(fā)生變化,因此只要滿(mǎn)足現(xiàn)有需求就可以了,所以你一開(kāi)始寫(xiě)的代碼并沒(méi)有什么不妥……問(wèn)題發(fā)生在需求變化之后,”老C加重了語(yǔ)氣,“現(xiàn)在我們已經(jīng)知道需求可能在那些地方變化,而且就現(xiàn)實(shí)情況而言,一旦需求在某處發(fā)生變化,那么它就會(huì)經(jīng)常在此處發(fā)生變化。這個(gè)時(shí)候我們就需要對(duì)程序結(jié)構(gòu)進(jìn)行調(diào)整,以應(yīng)對(duì)這種變化,而不只是在原來(lái)的基礎(chǔ)上縫縫補(bǔ)補(bǔ)……那樣會(huì)帶來(lái)很多重復(fù)性的勞動(dòng)!”
     “……槑”
     “算了,這些都是隨著編碼規(guī)模的增大而得來(lái)的經(jīng)驗(yàn),相信你以后會(huì)逐步明白的,我看好你哦!”
     “謝謝啊!”
     “總之這就是思維的差異帶來(lái)的代碼風(fēng)格的差異,我也是在用C++進(jìn)行了幾次項(xiàng)目之后才慢慢明白的,如果只是單純的游弋在C語(yǔ)言的世界,我覺(jué)得我要明白這些東西還需要很長(zhǎng)時(shí)間啊。”
     “這個(gè)和C++有什么關(guān)系?”小P有些不解。
     “當(dāng)然有關(guān)系了,因?yàn)槭褂昧薈++后,我思考問(wèn)題的方式與只使用C的時(shí)候發(fā)生了很大的不同,因?yàn)樗季S方式的不同,導(dǎo)致我的C代碼風(fēng)格發(fā)生了很大變化……但是話說(shuō)回來(lái),每種風(fēng)格沒(méi)有好壞的區(qū)別,只有合適不合適的區(qū)別。等我們打掃完實(shí)驗(yàn)室,我們?cè)僭囋囋趺从肅++改寫(xiě)這些代碼,至于現(xiàn)在,時(shí)候也不早了,我們?nèi)コ晕顼埌桑?#8221;制止住又想發(fā)問(wèn)的小P,老C拉起他就向門(mén)外走。
     “哎哎,我還有問(wèn)題要問(wèn)呢,要不吃飯的時(shí)候你再?lài)妵?#8230;…”


     (未完待續(xù))
     (請(qǐng)勿轉(zhuǎn)載,謝謝!)

posted on 2009-01-18 02:08 Anderson 閱讀(2699) 評(píng)論(12)  編輯 收藏 引用

評(píng)論

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-01-18 19:51 蟲(chóng)牙

支持
狂頂  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-01-19 13:15 likenk

^_^,道理和MFC中的消息映射一樣。  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流[未登錄](méi) 2009-01-19 15:09 Anderson

@likenk
沒(méi)錯(cuò)!就是DECLAR_DYNAMIC和IMPLEMENT_DYNAMIC做的事情,而后面的具體實(shí)現(xiàn)函數(shù)就像On_XXX一樣。^_^  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-01-20 13:50 李現(xiàn)民

這種風(fēng)格, 挺好  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-01-20 15:18 Auguste

這樣寫(xiě),挺好的,希望能繼續(xù)下去!  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流[未登錄](méi) 2009-01-22 16:56 Len

不錯(cuò)阿,從敘述到代碼風(fēng)格,都是非常認(rèn)真
講得東西也非常有吸引力  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-02-19 15:28 霜之哀傷

nice  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-03-28 21:15 funcoding

支持,請(qǐng)繼續(xù)  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-04-18 21:38 wqf

太贊了!咱交大有才的人咋就這么多!  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流[未登錄](méi) 2009-09-01 19:25 wstonep

支持!!!!  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2009-10-02 18:38 ddlau

我這是第二次看你的文章了,第一次因?yàn)橐恍┚壒蕸](méi)能看完~
寫(xiě)的對(duì)我來(lái)說(shuō)很好,很有幫助,謝謝  回復(fù)  更多評(píng)論   

# re: 第一桶 從C到C++ 第一碗 潘小P初登教研室 陳老C笑談顯風(fēng)流 2010-09-04 15:47 JasonRen

初看adapter代碼的時(shí)候沒(méi)有發(fā)現(xiàn),仔細(xì)想想里面從架構(gòu)到模塊實(shí)現(xiàn)都采用了這種思想!帥帥說(shuō)代碼寫(xiě)得好,但當(dāng)時(shí)我沒(méi)有發(fā)現(xiàn)好在什么地方,現(xiàn)在有體會(huì)了!用c++的語(yǔ)言風(fēng)格在C中實(shí)現(xiàn)!!回頭再仔細(xì)分析一下!
  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(6)

隨筆檔案(21)

文章檔案(1)

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产高清视频| 亚洲午夜女主播在线直播| 久久久噜噜噜久久中文字免| 在线视频日本亚洲性| 国产精品久久久久三级| 午夜亚洲性色福利视频| 一区二区三区免费观看| 国产精品久久久久毛片大屁完整版| 亚洲一区免费网站| 亚洲午夜精品网| 国产视频一区欧美| 老牛影视一区二区三区| 欧美a一区二区| 一区二区激情视频| 亚洲婷婷综合久久一本伊一区| 国产女人18毛片水18精品| 久久五月婷婷丁香社区| 葵司免费一区二区三区四区五区| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产精品久久久久| 欧美三日本三级少妇三2023| 午夜在线不卡| 久久一区二区三区超碰国产精品| 亚洲精品日韩在线观看| 亚洲视频第一页| 狠狠爱成人网| 亚洲免费观看| 激情久久婷婷| 夜夜嗨av色一区二区不卡| 国产亚洲激情在线| 亚洲人成久久| 国产欧美日韩伦理| 亚洲国产精品免费| 国产精品欧美一区喷水| 欧美电影在线观看| 国产精品久久婷婷六月丁香| 美女精品在线观看| 国产精品jvid在线观看蜜臀| 老司机亚洲精品| 欧美色偷偷大香| 亚洲第一网站| 国产日韩一区欧美| 日韩视频一区二区三区在线播放| 国产日韩欧美夫妻视频在线观看| 亚洲电影免费观看高清完整版| 国产麻豆精品久久一二三| 欧美成人免费观看| 国产婷婷精品| 一区二区激情| av成人免费| 老色鬼久久亚洲一区二区| 欧美一区二区三区四区夜夜大片| 欧美精品二区三区四区免费看视频| 欧美亚洲三区| 欧美婷婷六月丁香综合色| 欧美岛国激情| 国内精品一区二区| 亚洲欧美区自拍先锋| 亚洲精品裸体| 久久亚洲精品中文字幕冲田杏梨| 欧美在线免费播放| 欧美亚州在线观看| 亚洲美洲欧洲综合国产一区| 亚洲欧洲综合另类| 你懂的国产精品永久在线| 久久久久一区二区三区四区| 国产精品香蕉在线观看| 中日韩高清电影网| 亚洲午夜在线观看| 欧美日韩精品系列| 亚洲欧洲精品成人久久奇米网| 在线看片成人| 久久免费午夜影院| 久久亚洲色图| 永久免费视频成人| 久久理论片午夜琪琪电影网| 久久久精品国产免费观看同学| 国产精品一区二区久激情瑜伽| 一区二区三区视频在线| 亚洲素人一区二区| 欧美精品一区在线发布| 91久久精品国产| 9色精品在线| 欧美日韩国产一区二区| 99精品视频免费| 亚洲夜晚福利在线观看| 国产精品户外野外| 午夜日韩av| 欧美一区二区在线观看| 国内外成人免费激情在线视频| 性亚洲最疯狂xxxx高清| 久久青青草综合| 亚洲国产精品一区二区第四页av| 久色成人在线| 99视频一区二区| 久久精品卡一| 亚洲国产网站| 欧美视频在线看| 性娇小13――14欧美| 蜜月aⅴ免费一区二区三区| 亚洲国产日韩一区| 欧美日韩中文精品| 欧美亚洲网站| 亚洲国产精品一区二区三区| 亚洲狼人综合| 国产精品乱码久久久久久| 久久se精品一区二区| 亚洲第一福利视频| 午夜精品久久久久久久白皮肤 | 亚洲视频一区二区在线观看| 欧美体内谢she精2性欧美| 亚欧成人在线| 亚洲精选中文字幕| 久久久久国产成人精品亚洲午夜| 亚洲高清色综合| 国产精品国产a级| 久久一区精品| 亚洲一区二区三区中文字幕在线 | 国产亚洲欧美一级| 欧美1区视频| 欧美在线免费观看| 亚洲精品免费一区二区三区| 欧美资源在线| 一区二区欧美在线| 亚洲电影视频在线| 国产精品综合网站| 欧美精品久久久久久久久老牛影院| 亚洲影视九九影院在线观看| 亚洲福利一区| 久久五月天婷婷| 午夜一区二区三视频在线观看| 亚洲国产精品久久久久秋霞影院| 国产伦精品一区二区三区照片91 | 欧美日韩1080p| 久久久久久久久伊人| 在线视频免费在线观看一区二区| 欧美高清在线视频观看不卡| 久久精品国产免费看久久精品| 一本色道久久综合狠狠躁篇怎么玩 | 久久综合九色综合网站| 亚洲一区二区三区在线观看视频| 亚洲国产欧美日韩另类综合| 国产欧美视频一区二区三区| 欧美午夜大胆人体| 欧美日本在线看| 欧美成人蜜桃| 欧美1区视频| 麻豆精品网站| 美国十次了思思久久精品导航| 久久精品99国产精品酒店日本| 亚洲视频在线视频| 一本色道久久99精品综合| 亚洲精品美女免费| 亚洲精品久久嫩草网站秘色| 亚洲国产成人av好男人在线观看| 免费亚洲网站| 免费人成精品欧美精品| 美女91精品| 男女激情久久| 欧美激情一区在线| 亚洲国产婷婷| 亚洲日本成人网| 亚洲激情一区二区三区| 91久久久亚洲精品| 亚洲啪啪91| 亚洲精品一区二区三区四区高清| 亚洲成人自拍视频| 亚洲欧洲在线免费| 亚洲另类在线一区| 日韩一级二级三级| 亚洲尤物精选| 欧美主播一区二区三区| 久久噜噜亚洲综合| 欧美不卡在线视频| 欧美日韩国产成人在线| 欧美亚男人的天堂| 国产亚洲成精品久久| 韩国成人精品a∨在线观看| 激情另类综合| 亚洲人成毛片在线播放| 亚洲视频在线观看免费| 先锋影音久久| 美国十次成人| 日韩亚洲精品视频| 午夜视频在线观看一区二区三区 | 欧美大片在线影院| 欧美色视频日本高清在线观看| 国产精品午夜久久| 一色屋精品视频免费看| 亚洲毛片视频| 香蕉免费一区二区三区在线观看| 欧美一区二区视频免费观看| 鲁大师影院一区二区三区| 亚洲国产福利在线| 亚洲伊人一本大道中文字幕| 久久久久久一区二区| 欧美天天综合网| 在线观看日产精品| 亚洲在线一区| 欧美a级大片|