日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)

發布時間:2024/1/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何编写无法维护的代码 让自己稳拿铁饭碗 ;-) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何編寫無法維護的代碼

讓自己穩拿鐵飯碗 ;-)

Roedy Green

簡介

?

永遠不要(把自己遇到的問題)歸因于(他人的)惡意,這恰恰說明了(你自己的)無能。-- 拿破侖

?

為了造福大眾,在Java編程領域創造就業機會,兄弟我在此傳授大師們的秘籍。這些大師寫的代碼極其難以維護,后繼者就是想對它做最簡單的修改都需要花上數年時間。而且,如果你能對照秘籍潛心修煉,你甚至可以給自己弄個鐵飯碗,因為除了你之外,沒人能維護你寫的代碼。再而且,如果你能練就秘籍中的?全部?招式,那么連你自己都無法維護你的代碼了!

你不想練功過度走火入魔吧。那就不要讓你的代碼?一眼看去?就完全無法維護,只要它?實質上是?那樣就行了。否則,你的代碼就有被重寫或重構的風險!

總體原則

?

Quidquid latine dictum sit, altum sonatur.(隨便用拉丁文寫點啥都會顯得高大上。)

?

想挫敗維護代碼的程序員,你必須先明白他的思維方式。他接手了你的龐大程序,沒有時間把它全部讀一遍,更別說理解它了。他無非是想快速找到修改代碼的位置、改代碼、編譯,然后就能交差,并希望他的修改不會出現意外的副作用。

他查看你的代碼不過是管中窺豹,一次只能看到一小段而已。你要確保他永遠看不到全貌。要盡量和讓他難以找到他想找的代碼。但更重要的是,要讓他不能有把握?忽略?任何東西。

程序員都被編程慣例洗腦了,還為此自鳴得意。每一次你處心積慮地違背編程慣例,都會迫使他必須用放大鏡去仔細閱讀你的每一行代碼。

你可能會覺得每個語言特性都可以用來讓代碼難以維護,其實不然。你必須精心地誤用它們才行。

命名

?

"當我使用一個單詞的時候" Humpty Dumpty 曾經用一種輕蔑的口氣說, "它就是我想表達的意思,不多也不少。“- Lewis Carroll -- 《愛麗絲魔鏡之旅》, 第6章

?

編寫無法維護代碼的技巧的重中之重是變量和方法命名的藝術。如何命名是和編譯器無關的。這就讓你有巨大的自由度去利用它們迷惑維護代碼的程序員。

妙用?寶寶起名大全

買本寶寶起名大全,你就永遠不缺變量名了。比如??Fred?就是個好名字,而且鍵盤輸入它也省事。如果你就想找一些容易輸入的變量名,可以試試??adsf

或者?

aoeu

之類。

單字母變量名

如果你給變量起名為a,b,c,用簡單的文本編輯器就沒法搜索它們的引用。而且,沒人能猜到它們的含義。

創造性的拼寫錯誤

如果你必須使用描述性的變量和函數名,那就把它們都拼錯。還可以把某些函數和變量名拼錯,再把其他的拼對(例如 SetPintleOpening 和 SetPintalClosing) ,我們就能有效地將grep或IDE搜索技術玩弄于股掌之上。這招超級管用。還可以混淆不同語言(比如colour?-- 英國英語,和?color?

-- 美國英語)。

抽象

在命名函數和變量的時候,充分利用抽象單詞,例如?it,?everything,?data,?handle,?stuff,?do,?routine,?perform?和數字,例如 e.g.??routineX48?,?PerformDataFunction?,??DoIt?,??HandleStuff

還有?

do_args_method

首字母大寫的縮寫

用首字母大寫縮寫(比如GNU 代表 GNU's Not Unix) 使代碼簡潔難懂。真正的漢子(無論男女)從來不說明這種縮寫的含義,他們生下來就懂。

辭典大輪換

為了打破沉悶的編程氣氛,你可以用一本辭典來查找盡量多的同義詞。例如?display,?show,?present。在注釋里含糊其辭地暗示這些命名之間有細微的差別,其實根本沒有。不過,如果有兩個命名相似的函數真的有重大差別,那倒是一定要確保它們用相同的單詞來命名(例如,對于 "寫入文件", "在紙上書寫" 和 "屏幕顯示" 都用?print?

來命名)。 在任何情況下都不要屈服于編寫明確的項目詞匯表這種無理要求。你可以辯解說,這種要求是一種不專業的行為,它違反了結構化設計的信息隱藏原則。

首字母大寫

隨機地把單詞中間某個音節的首字母大寫。例如?

ComputeReSult()

重用命名

在語言規則允許的地方,盡量把類、構造器、方法、成員變量、參數和局部變量都命名成一樣。更高級的技巧是在{}塊中重用局部變量。這樣做的目的是迫使維護代碼的程序員認真檢查每個示例的范圍。特別是在Java代碼中,可以把普通方法偽裝成構造器。

使用非英語字母

在命名中偷偷使用不易察覺的非英語字母,例如

typedef struct { int i; } ínt;

看上去沒啥不對是吧?嘿嘿嘿...這里的第二個 ínt 的??í

實際上是東北歐字母,并不是英語中的 i 。在簡單的文本編輯器里,想看出這一點點區別幾乎是不可能的。

巧妙利用編譯器對于命名長度的限制

如果編譯器只區分命名的前幾位,比如前8位,那么就把后面的字母寫得不一樣。比如,其實是同一個變量,有時候寫成?var_unit_update()?,有時候又寫成?var_unit_setup(),看起來是兩個不同的函數調用。而在編譯的時候,它們其實是同一個變量?

var_unit。

下劃線,一位真正的朋友

可以拿 _ 和 __ 作為標示符。

混合多語言

隨機地混用兩種語言(人類語言或計算機語言都行)。如果老板要求使用他指定的語言,你就告訴他你用自己的語言更有利于組織你的思路,萬一這招不管用,就去控訴這是語言歧視,并威脅起訴老板要求巨額精神損失賠償。

擴展 ASCII 字符

擴展 ASCII 字符用于變量命名是完全合法的,包括 ?, D, 和 ? 等。在簡單的文本編輯器里,除了拷貝/粘貼,基本上沒法輸入。

其他語言的命名

使用外語字典作為變量名的來源。例如,可以用德語單詞?punkt?代替?

point。除非維護代碼的程序員也像你一樣熟練掌握了德語. 不然他就只能盡情地在代碼中享受異域風情了。

數學命名

用數學操作符的單詞來命名變量。例如:

openParen?=?(slash?asterix)??/?equals;

(左圓括號 = (斜杠 星號)/等號;)

令人眩暈的命名

用帶有完全不相關的感情色彩的單詞來命名變量。例如:

marypoppins?=?(superman?starship)??/?god;

(歡樂滿人間 = (超人 星河戰隊)/上帝;)

這一招可以讓閱讀代碼的人陷入迷惑之中,因為他們在試圖想清楚這些命名的邏輯時,會不自覺地聯系到不同的感情場景里而無法自拔。

何時使用 i

永遠不要把??i?用作最內層的循環變量。 用什么命名都行,就是別用?i

。把?

i

用在其他地方就隨便了,用作非整數變量尤其好。

慣例 -- 明修棧道,暗度陳倉

忽視?Java 編碼慣例,Sun 就是這樣做的。幸運的是,你違反了它編譯器也不會打小報告。這一招的目的是搞出一些在某些特殊情況下有細微差別的名字來。如果你被強迫遵循駝峰法命名,你還是可以在某些模棱兩可的情況下顛覆它。例如,input?F?ile?name?和?input?f?ile?N?ame?

兩個命名都可以合法使用。在此基礎上自己發明一套復雜到變態的命名慣例,然后就可以痛扁其他人,說他們違反了慣例。

小寫的 l 看上去很像數字 1

用小寫字母 l 標識 long 常數。例如 10l 更容易被誤認為是 101 而不是 10L 。 禁用所有能讓人準確區分 uvw wW gq9 2z 5s il17|!j oO08 `'" ;,. m nn rn {[()]} 的字體。要做個有創造力的人。

把全局命名重用為私有

在A 模塊里聲明一個全局數組,然后在B 模塊的頭文件里在聲明一個同名的私有數組,這樣看起來你在B 模塊里引用的是那個全局數組,其實卻不是。不要在注釋里提到這個重復的情況。

誤導性的命名

讓每個方法都和它的名字蘊含的功能有一些差異。例如,一個叫?

isValid(x)

的方法在判斷完參數x的合法性之后,還順帶著把它轉換成二進制并保存到數據庫里。

偽裝

?

當一個bug需要越長的時間才會暴露,它就越難被發現。- Roedy Green(本文作者)

?

編寫無法維護代碼的另一大秘訣就是偽裝的藝術,即隱藏它或者讓它看起來像其他東西。很多招式有賴于這樣一個事實:編譯器比肉眼或文本編輯器更有分辨能力。下面是一些偽裝的最佳招式。

把代碼偽裝成注釋,反之亦然

下面包括了一些被注釋掉的代碼,但是一眼看去卻像是正常代碼。 for(j?=?0; j?<?array_len; j ??=?8)

{

total??=?array?[?j 0??]?;?

total??=?array?[?j 1??]?;?

total??=?array?[?j 2??]?;?

total??=?array?[?j 6??]?;?

total??=?array?[?j 7??]?;?

}

如果不是用綠色標出來,你能注意到這三行代碼被注釋掉了么?

用連接符隱藏變量

對于下面的定義

#define local_var xy_z

可以把 "xy_z" 打散到兩行里:

#define local_var xy\_z // local_var OK

這樣全局搜索 xy_z 的操作在這個文件里就一無所獲了。 對于 C 預處理器來說,第一行最后的 "" 表示繼續拼接下一行的內容。

文檔

任何傻瓜都能說真話,而要把謊編圓則需要相當的智慧。- Samuel Butler (1835 - 1902)

不正確的文檔往往比沒有文檔還糟糕。- Bertrand Meyer

既然計算機是忽略注釋和文檔的,你就可以在里邊堂而皇之地編織彌天大謊,讓可憐的維護代碼的程序員徹底迷失。

在注釋中撒謊

實際上你不需要主動地撒謊,只要沒有及時保持注釋和代碼更新的一致性就可以了。

只記錄顯而易見的東西

往代碼里摻進去類似于?這樣的注釋,但是永遠不要記錄包或者方法的整體設計這樣的干貨。

記錄 How 而不是 Why

只解釋一個程序功能的細節,而不是它要完成的任務是什么。這樣的話,如果出現了一個bug,修復者就搞不清這里的代碼應有的功能。

該寫的別寫

比如你在開發一套航班預定系統,那就要精心設計,讓它在增加另一個航空公司的時候至少有25處代碼需要修改。永遠不要在文檔里說明要修改的位置。后來的開發人員要想修改你的代碼門都沒有,除非他們能把每一行代碼都讀懂。

計量單位

永遠不要在文檔中說明任何變量、輸入、輸出或參數的計量單位,如英尺、米、加侖等。計量單位對數豆子不是太重要,但在工程領域就相當重要了。同理,永遠不要說明任何轉換常量的計量單位,或者是它的取值如何獲得。要想讓代碼更亂的話,你還可以在注釋里寫上錯誤的計量單位,這是赤裸裸的欺騙,但是非常有效。如果你想做一個惡貫滿盈的人,不妨自己發明一套計量單位,用自己或某個小人物的名字命名這套計量單位,但不要給出定義。萬一有人挑刺兒,你就告訴他們,你這么做是為了把浮點數運算湊成整數運算而進行的轉換。

永遠不要記錄代碼中的坑。如果你懷疑某個類里可能有bug,天知地知你知就好。如果你想到了重構或重寫代碼的思路,看在老天爺的份上,千萬別寫出來。切記電影《小鹿斑比》里那句臺詞?"如果你不能說好聽的話,那就什么也不要說。"。萬一這段代碼的原作者看到你的注釋怎么辦?萬一老板看到了怎么辦?萬一客戶看到了怎么辦?搞不好最后你自己被解雇了。一句”這里需要修改“的匿名注釋就好多了,尤其是當看不清這句注釋指的是哪里需要修改的情況下。切記難得糊涂四個字,這樣大家都不會感覺受到了批評。

說明變量

永遠不要?對變量聲明加注釋。有關變量使用的方式、邊界值、合法值、小數點后的位數、計量單位、顯示格式、數據錄入規則等等,后繼者完全可以自己從程序代碼中去理解和整理嘛。如果老板強迫你寫注釋,就把方法體代碼混進去,但絕對不要對變量聲明寫注釋,即使是臨時變量!

在注釋里挑撥離間

為了阻撓任何雇傭外部維護承包商的傾向,可以在代碼中散布針對其他同行軟件公司的攻擊和抹黑,特別是可能接替你工作的其中任何一家。例如: class??clever_SSInc

{

.?.?.

}

可能的話,除了注釋之外,這些攻擊抹黑的內容也要摻到代碼里的重要部分,這樣如果管理層想清理掉這些攻擊性的言論然后發給外部承包商去維護,就會破壞代碼結構。

程序設計

編寫無法維護代碼的基本規則就是:在盡可能多的地方,以盡可能多的方式表述每一個事實。- Roedy Green

編寫可維護代碼的關鍵因素是只在一個地方表述應用里的一個事實。如果你的想法變了,你也只在一個地方修改,這樣就能保證整個程序正常工作。所以,編寫無法維護代碼的關鍵因素就是反復地表述同一個事實,在盡可能多的地方,以盡可能多的方式進行。令人高興的是,像Java這樣的語言讓編寫這種無法維護代碼變得非常容易。例如,改變一個被引用很多的變量的類型幾乎是不可能的,因為所有造型和轉換功能都會出錯,而且關聯的臨時變量的類型也不合適了。而且,如果變量值要在屏幕上顯示,那么所有相關的顯示和數據錄入代碼都必須一一找到并手工進行修改。類似的還有很多,比如由C和Java組成的Algol語言系列,Abundance甚至Smalltalk對于數組等結構的處理,都是大有可為的。

Java 造型

Java的造型機制是上帝的禮物。你可以問心無愧地使用它,因為Java語言本身就需要它。每次你從一個Collection 里獲取一個對象,你都必須把它造型為原始類型。這樣這個變量的類型就必須在無數地方表述。如果后來類型變了,所有的造型都要修改才能匹配。如果倒霉的維護代碼的程序員沒有找全(或者修改太多),編譯器能不能檢測到也不好說。類似的,如果變量類型從?short?變成??int?,所有匹配的造型也都要從(short)

改成?

(int)

利用Java的冗余

Java要求你給每個變量的類型寫兩次表述。 Java 程序員已經習慣了這種冗余,他們不會注意到你的兩次表述有細微的差別,例如

Bubblegum?b?=?new?Bubblegom();

不幸的是 操作符的盛行讓下面這種偽冗余代碼得手的難度變大了:

swimmer?=?swimner?1;

永遠不做校驗

永遠不要對輸入數據做任何的正確性或差異性檢查。這樣能表現你對公司設備的絕對信任,以及你是一位信任所有項目伙伴和系統管理員的團隊合作者。總是返回合理的值,即使數據輸入有問題或者錯誤。

有禮貌,無斷言

避免使用 assert() 機制,因為它可能把三天的debug盛宴變成10分鐘的快餐。

避免封裝

為了提高效率,不要使用封裝。方法的調用者需要所有能得到的外部信息,以便了解方法的內部是如何工作的。

復制粘貼修改

以效率的名義,使用 復制 粘貼 修改。這樣比寫成小型可復用模塊效率高得多。在用代碼行數衡量你的進度的小作坊里,這招尤其管用。

使用靜態數組

如果一個庫里的模塊需要一個數組來存放圖片,就定義一個靜態數組。沒人會有比512 X 512 更大的圖片,所以固定大小的數組就可以了。為了最佳精度,就把它定義成 double 類型的數組。

傻瓜接口

編寫一個名為 "WrittenByMe" 之類的空接口,然后讓你的所有類都實現它。然后給所有你用到的Java 內置類編寫包裝類。這里的思想是確保你程序里的每個對象都實現這個接口。最后,編寫所有的方法,讓它們的參數和返回類型都是這個 WrittenByMe。這樣就幾乎不可能搞清楚某個方法的功能是什么,并且所有類型都需要好玩的造型方法。更出格的玩法是,讓每個團隊成員編寫它們自己的接口(例如 WrittenByJoe),程序員用到的任何類都要實現他自己的接口。這樣你就可以在大量無意義接口中隨便找一個來引用對象了。

巨型監聽器

永遠不要為每個組件創建分開的監聽器。對所有按鈕總是用同一個監聽器,只要用大量的if...else 來判斷是哪一個按鈕被點擊就行了。

好事成堆TM

狂野地使用封裝和OO思想。例如

myPanel?.?add( getMyButton?(?)?);?

private?JButton??getMyButton

()

{

return?myButton;?

}

這段很可能看起來不怎么好笑。別擔心,只是時候未到而已。

友好的朋友

在C 里盡量多使用friend聲明。再把創建類的指針傳遞給已創建類。現在你不用浪費時間去考慮接口了。另外,你應該用上關鍵字private?和?protected?

來表明你的類封裝得很好。

使用三維數組

大量使用它們。用扭曲的方式在數組之間移動數據,比如,用arrayA里的行去填充arrayB的列。這么做的時候,不管三七二十一再加上1的偏移值,這樣很靈。讓維護代碼的程序員抓狂去吧。

混合與匹配

存取方法和公共變量神馬的都要給他用上。這樣的話,你無需調用存取器的開銷就可以修改一個對象的變量,還能宣稱這個類是個"Java Bean"。對于那些試圖添加日志函數來找出改變值的源頭的維護代碼的程序員,用這一招來迷惑他尤其有效。

沒有秘密!

把每個方法和變量都聲明為 public。畢竟某個人某天可能會需要用到它。一旦方法被聲明為public 了,就很難縮回去。對不?這樣任何它覆蓋到的代碼都很難修改了。它還有個令人愉快的副作用,就是讓你看不清類的作用是什么。如果老板質問你是不是瘋了,你就告訴他你遵循的是經典的透明接口原則。

全堆一塊

把你所有的沒用的和過時的方法和變量都留在代碼里。畢竟說起來,既然你在1976年用過一次,誰知道你啥時候會需要再用到呢?當然程序是改了,但它也可能會改回來嘛,你"不想要重新發明輪子"(領導們都會喜歡這樣的口氣)。如果你還原封不動地留著這些方法和變量的注釋,而且注釋寫得又高深莫測,甭管維護代碼的是誰,恐怕都不敢對它輕舉妄動。

就是 Final

把你所有的葉子類都聲明為 final。畢竟說起來,你在項目里的活兒都干完了,顯然不會有其他人會通過擴展你的類來改進你的代碼。這種情況甚至可能有安全漏洞。 java.lang.String 被定義成 final 也許就是這個原因吧?如果項目組其他程序員有意見,告訴他們這樣做能夠提高運行速度。

避免布局

永遠不要用到布局。當維護代碼的程序員想增加一個字段,他必須手工調整屏幕上顯示所有內容的絕對坐標值。如果老板強迫你使用布局,那就寫一個巨型的 GridBagLayout 并在里面用絕對坐標進行硬編碼。

全局變量,怎么強調都不過分

如果上帝不愿意我們使用全局變量,他就不會發明出這個東西。不要讓上帝失望,盡量多使用全局變量。每個函數最起碼都要使用和設置其中的兩個,即使沒有理由也要這么做。畢竟,任何優秀的維護代碼的程序員都會很快搞清楚這是一種偵探工作測試,有利于讓他們從笨蛋中脫穎而出。

再一次說說全局變量

全局變量讓你可以省去在函數里描述參數的麻煩。充分利用這一點。在全局變量中選那么幾個來表示對其他全局變量進行操作的類型。

局部變量

永遠不要用局部變量。在你感覺想要用的時候,把它改成一個實例或者靜態變量,并無私地和其他方法分享它。這樣做的好處是,你以后在其他方法里寫類似聲明的時候會節省時間。C 程序員可以百尺竿頭更進一步,把所有變量都弄成全局的。

配置文件

配置文件通常是以 關鍵字 = 值 的形式出現。在加載時這些值被放入 Java 變量中。最明顯的迷惑技術就是把有細微差別的名字用于關鍵字和Java 變量.甚至可以在配置文件里定義運行時根本不會改變的常量。參數文件變量和簡單變量比,維護它的代碼量起碼是后者的5倍。

子類

對于編寫無法維護代碼的任務來說,面向對象編程的思想簡直是天賜之寶。如果你有一個類,里邊有10個屬性(成員/方法),可以考慮寫一個基類,里面只有一個屬性,然后產生9層的子類,每層增加一個屬性。等你訪問到最終的子類時,你才能得到全部10個屬性。如果可能,把每個類的聲明都放在不同的文件里。

編碼迷局

迷惑 C

從互聯網上的各種混亂C 語言競賽中學習,追隨大師們的腳步。

追求極致

總是追求用最迷惑的方式來做普通的任務。例如,要用數組來把整數轉換為相應的字符串,可以這么做:

char *p;

switch (n)?

{?

case 1:?

p = "one";?

if (0)?

case 2:?

p = "two";?

if (0)?

case 3:?

p = "three";?

printf("%s", p);?

break;?

}

一致性的小淘氣

當你需要一個字符常量的時候,可以用多種不同格式: ' ', 32, 0x20, 040。在C或Java里10和010是不同的數(0開頭的表示16進制),你也可以充分利用這個特性。

造型

把所有數據都以 void * 形式傳遞,然后再造型為合適的結構。不用結構而是通過位移字節數來造型也很好玩。

嵌套 Switch

Switch 里邊還有 Switch,這種嵌套方式是人類大腦難以破解的。

利用隱式轉化

牢記編程語言中所有的隱式轉化細節。充分利用它們。數組的索引要用浮點變量,循環計數器用字符,對數字執行字符串函數調用。不管怎么說,所有這些操作都是合法的,它們無非是讓源代碼更簡潔而已。任何嘗試理解它們的維護者都會對你感激不盡,因為他們必須閱讀和學習整個關于隱式數據類型轉化的章節,而這個章節很可能是他們來維護你的代碼之前完全忽略了的。

分號!

在所有語法允許的地方都加上分號,例如:

if(a);

else;

{

int??d?;?

d??=?c;?

}?

;

使用八進制數

把八進制數混到十進制數列表里,就像這樣:

array?=?new?int??[?]

{

111?,

120?,

013?,

121?,

};

嵌套

盡可能深地嵌套。優秀的程序員能在一行代碼里寫10層(),在一個方法里寫20層{}。

C數組

C編譯器會把??myArray??轉換成??*(myArray i)?,它等同于??*(i myArray)

也等同于?

i[myArray]

。 高手都知道怎么用好這個招。可以用下面的函數來產生索引,這樣就把代碼搞亂了:

int myfunc(int q, int p) { return p%q; }??
...??
myfunc(6291, 8)[Array];

遺憾的是,這一招只能在本地C類里用,Java 還不行。

放長線釣大魚

一行代碼里堆的東西越多越好。這樣可以省下臨時變量的開銷,去掉換行和空格還可以縮短源文件大小。記住,要去掉運算符兩邊的空格。優秀的程序員總是能突破某些編輯器對于255個字符行寬的限制。

異常

我這里要向你傳授一個編程中鮮為人知的秘訣。異常是個討厭的東西。良好的代碼永遠不會出錯,所以異常實際上是不必要的。不要把時間浪費在這上面。子類異常是給那些知道自己代碼會出錯的低能兒用的。在整個應用里,你只用在main()里放一個try/catch,里邊直接調用 System.exit()就行了。在每個方法頭要貼上標準的拋出集合定義,到底會不會拋出異常你就不用管了。

使用異常的時機

在非異常條件下才要使用異常。比如終止循環就可以用?

ArrayIndexOutOfBoundsException

。還可以從異常里的方法返回標準的結果。

狂熱奔放地使用線程

如題。

測試

在程序里留些bug,讓后繼的維護代碼的程序員能做點有意思的事。精心設計的bug是無跡可尋的,而且誰也不知道它啥時候會冒出來。要做到這一點,最簡單的辦法的就是不要測試代碼。

永不測試

永遠不要測試負責處理錯誤、當機或操作系故障的任何代碼。反正這些代碼永遠也不會執行,只會拖累你的測試。還有,你怎么可能測試處理磁盤錯誤、文件讀取錯誤、操作系統崩潰這些類型的事件呢?為啥你要用特別不穩定的計算機或者用測試腳手架來模擬這樣的環境?現代化的硬件永遠不會崩潰,誰還愿意寫一些僅僅用于測試的代碼?這一點也不好玩。如果用戶抱怨,你就怪到操作系統或者硬件頭上。他們永遠不會知道真相的。

永遠不要做性能測試

嘿,如果軟件運行不夠快,只要告訴客戶買個更快的機器就行了。如果你真的做了性能測試,你可能會發現一個瓶頸,這會導致修改算法,然后導致整個產品要重新設計。誰想要這種結果?而且,在客戶那邊發現性能問題意味著你可以免費到外地旅游。你只要備好護照和最新照片就行了。

永遠不要寫任何測試用例

永遠不要做代碼覆蓋率或路徑覆蓋率測試。自動化測試是給那些窩囊廢用的。搞清楚哪些特性占到你的例程使用率的90%,然后把90%的測試用在這些路徑上。畢竟說起來,這種方法可能只測試到了大約你代碼的60%,這樣你就節省了40%的測試工作。這能幫助你趕上項目后端的進度。等到有人發現所有這些漂亮的“市場特性”不能正常工作的時候,你早就跑路了。一些有名的大軟件公司就是這樣測試代碼的,所以你也應該這樣做。如果因為某種原因你還沒走,那就接著看下一節。

測試是給懦夫用的

勇敢的程序員會跳過這個步驟。太多程序員害怕他們的老板,害怕丟掉工作,害怕客戶的投訴郵件,害怕遭到起訴。這種恐懼心理麻痹了行動,降低了生產率。有科學研究成果表明,取消測試階段意味著經理有把握能提前確定交付時間,這對于規劃流程顯然是有利的。消除了恐懼心理,創新和實驗之花就隨之綻放。程序員的角色是生產代碼,調試工作完全可以由技術支持和遺留代碼維護組通力合作來進行。

如果我們對自己的編程能力有充分信心,那么測試就沒有必要了。如果我們邏輯地看待這個問題,隨便一個傻瓜都能認識到測試根本都不是為了解決技術問題,相反,它是一種感性的信心問題。針對這種缺乏信心的問題,更有效的解決辦法就是完全取消測試,送我們的程序員去參加自信心培訓課程。畢竟說起來,如果我們選擇做測試,那么我們就要測試每個程序的變更,但其實我們只需要送程序員去一次建立自信的培訓課就行了。很顯然這么做的成本收益是相當可觀的。

編程語言的選擇

計算機語言正在逐步進化,變得更加傻瓜化。使用最新的語言是不人性的。盡可能堅持使用你會用的最老的語言,先考慮用穿孔紙帶,不行就用匯編,再不行用FORTRAN 或者 COBOL,再不行就用C 還有 BASIC,實在不行再用 C 。

F?RTRAN

用 FORTRAN 寫所有的代碼。如果老板問你為啥,你可以回答說有很多它非常有用的庫,你用了可以節約時間。不過,用 FORTRAN 寫出可維護代碼的概率是0,所以,要達到不可維護代碼編程指南里的要求就容易多了。

用 ASM

把所有的通用工具函數都轉成匯編程序。

用 QBASIC

所有重要的庫函數都要用 QBASIC 寫,然后再寫個匯編的封包程序來處理 large 到 medium 的內存模型映射。

內聯匯編

在你的代碼里混雜一些內聯的匯編程序,這樣很好玩。這年頭幾乎沒人懂匯編程序了。只要放幾行匯編代碼就能讓維護代碼的程序員望而卻步。

宏匯編調用C

如果你有個匯編模塊被C調用,那就盡可能經常從匯編模塊再去調用C,即使只是出于微不足道的用途,另外要充分利用 goto, bcc 和其他炫目的匯編秘籍。

與他人共事之道

老板才是真行家

如果你的老板認為他20年的 FORTRAN 編程經驗對于現代軟件開發具有很高的指導價值,你務必嚴格采納他的所有建議。投桃報李,你的老板也會信任你。這會對你的職業發展有利。你還會從他那里學到很多搞亂程序代碼的新方法。

顛覆技術支持

確保代碼中到處是bug的有效方法是永遠不要讓維護代碼的程序員知道它們。這需要顛覆技術支持工作。永遠不接電話。使用自動語音答復“感謝撥打技術支持熱線。需要人工服務請按1,或在嘀聲后留言。”,請求幫助的電子郵件必須忽略,不要給它分配服務追蹤號。對任何問題的標準答復是“我估計你的賬戶被鎖定了,有權限幫你恢復的人現在不在。”

沉默是金

永遠不要對下一個危機保持警覺。如果你預見到某個問題可能會在一個固定時間爆發,摧毀西半球的全部生命,不要公開討論它。不要告訴朋友、同事或其他你認識的有本事的人。在任何情況下都不要發表任何可能暗示到這種新的威脅的內容。只發送一篇正常優先級的、語焉不詳的備忘錄給管理層,保護自己免遭秋后算賬。如果可能的話,把這篇稀里糊涂的信息作為另外一個更緊急的業務問題的附件。這樣就可以心安理得地休息了,你知道將來你被強制提前退休之后一段時間,他們又會求著你回來,并給你對數級增長的時薪!

每月一書俱樂部

加入一個計算機每月一書俱樂部。選擇那些看上去忙著寫書不可能有時間真的去寫代碼的作者。去書店里找一些有很多圖表但是沒有代碼例子的書。瀏覽一下這些書,從中學會一些迂腐拗口的術語,用它們就能唬住那些自以為是的維護代碼的程序員。你的代碼肯定會給他留下深刻印象。如果人們連你寫的術語都理解不了,他們一定會認為你非常聰明,你的算法非常深奧。不要在你的算法說明里作任何樸素的類比。

自立門戶

你一直想寫系統級的代碼。現在機會來了。忽略標準庫,?

編寫你自己的標準

,這將會是你簡歷中的一個亮點。

推出你自己的 BNF 范式

總是用你自創的、獨一無二的、無文檔的BNF范式記錄你的命令語法。永遠不要提供一套帶注解的例子(合法命令和非法命令之類)來解釋你的語法體系。那樣會顯得完全缺乏學術嚴謹性。確保沒有明顯的方式來區分終結符和中間符號。永遠不要用字體、顏色、大小寫和其他任何視覺提示幫助讀者分辨它們。在你的 BNF 范式用和命令語言本身完全一樣的標點符號,這樣讀者就永遠無法分清一段 (...), [...], {...} 或 "..." 到底是你在命令行里真正輸入的,還是想提示在你的BNF 范式里哪個語法元素是必需的、可重復的、或可選的。不管怎么樣,如果他們太笨,搞不清你的BNF 范式的變化,就沒資格使用你的程序。

推出你自己的內存分配

地球人兒都知道,調試動態存儲是復雜和費時的。與其逐個類去確認它沒有內存溢出,還不如自創一套存儲分配機制呢。其實它無非是從一大片內存中 malloc 一塊空間而已。用不著釋放內存,讓用戶定期重啟動系統,這樣不就清除了堆么。重啟之后系統需要追蹤的就那么一點東西,比起解決所有的內存泄露簡單得不知道到哪里去了!而且,只要用戶記得定期重啟系統,他們也永遠不會遇到堆空間不足的問題。一旦系統被部署,你很難想象他們還能改變這個策略。

其他雜七雜八的招

?

如果你給某人一段程序,你會讓他困惑一天;如果你教他們如何編程,你會讓他困惑一輩子。-- Anonymous

?

  • 不要重編譯

    讓我們從一條可能是有史以來最友好的技巧開始:把代碼編譯成可執行文件。如果它能用,就在源代碼里做一兩個微小的改動 -- 每個模塊都照此辦理。?但是不要費勁巴拉地再編譯一次了。??你可以留著等以后有空而且需要調試的時候再說。多年以后,等可憐的維護代碼的程序員更改了代碼之后發現出錯了,他會有一種錯覺,覺得這些肯定是他自己最近修改的。這樣你就能讓他毫無頭緒地忙碌很長時間。
  • 挫敗調試工具

    對于試圖用行調試工具追蹤來看懂你的代碼的人,簡單的一招就能讓他狼狽不堪,那就是把每一行代碼都寫得很長。特別要把 then 語句 和 if 語句放在同一行里。他們無法設置斷點。他們也無法分清在看的分支是哪個 if 里的。
  • 公制和美制

    在工程方面有兩種編碼方式。一種是把所有輸入都轉換為公制(米制)計量單位,然后在輸出的時候自己換算回各種民用計量單位。另一種是從頭到尾都保持各種計量單位混合在一起。總是選擇第二種方式,這就是美國之道!
  • 持續改進

    要持續不懈地改進。要常常對你的代碼做出“改進”,并強迫用戶經常升級 -- 畢竟沒人愿意用一個過時的版本嘛。即便他們覺得他們對現有的程序滿意了,想想看,如果他們看到你又“完善“了它,他們會多么開心啊!不要告訴任何人版本之間的差別,除非你被逼無奈 -- 畢竟,為什么要告訴他們本來永遠也不會注意到的一些bug呢?
  • ”關于“

    ”關于“一欄應該只包含程序名、程序員姓名和一份用法律用語寫的版權聲明。理想情況下,它還應該鏈接到幾 MB 的代碼,產生有趣的動畫效果。但是,里邊永遠不要包含程序用途的描述、它的版本號、或最新代碼修改日期、或獲取更新的網站地址、或作者的email地址等。這樣,所有的用戶很快就會運行在不同的版本上,在安裝N 1版之前就試圖安裝N 2版。
  • 變更

    在兩個版本之間,你能做的變更自然是多多益善。你不會希望用戶年復一年地面對同一套老的接口或用戶界面,這樣會很無聊。最后,如果你能在用戶不注意的情況下做出這些變更,那就更好了 -- 這會讓他們保持警惕,戒驕戒躁。
  • 無需技能

    寫無法維護代碼不需要多高的技能。喊破嗓子不如甩開膀子,不管三七二十一開始寫代碼就行了。記住,管理層還在按代碼行數考核生產率,即使以后這些代碼里的大部分都得刪掉。
  • 只帶一把錘子

    一招鮮吃遍天,輕裝前進。如果你手頭只有一把錘子,那么所有的問題都是釘子。
  • 規范體系

    有可能的話,忽略當前你的項目所用語言和環境中被普羅大眾所接受的編程規范。比如,編寫基于MFC 的應用時,就堅持使用STL 編碼風格。
  • 翻轉通常的 True False 慣例

    把常用的 true 和 false 的定義反過來用。這一招聽起來平淡無奇,但是往往收獲奇效。你可以先藏好下面的定義:

    #define TRUE 0#define FALSE 1

    把這個定義深深地藏在代碼中某個沒人會再去看的文件里不易被發現的地方,然后讓程序做下面這樣的比較

    if ( var == TRUE )

    if ( var != FALSE )

    某些人肯定會迫不及待地跳出來“修正”這種明顯的冗余,并且在其他地方照著常規去使用變量var:

    if ( var )

    還有一招是為??TRUE??和??FALSE?賦予相同的值,雖然大部分人可能會看穿這種騙局。給它們分別賦值 1 和 2 或者 -1 和 0 是讓他們瞎忙乎的方式里更精巧的,而且這樣做看起來也不失對他們的尊重。你在Java 里也可以用這一招,定義一個叫?TRUE??

    的靜態常量。在這種情況下,其他程序員更有可能懷疑你干的不是好事,因為Java里已經有了內建的標識符?

    true

  • 第三方庫

    在你的項目里引入功能強大的第三方庫,然后不要用它們。潛規則就是這樣,雖然你對這些好的工具仍然一無所知,卻還是可以在你簡歷的“其他工具”一節中寫上這些沒用過的庫。
  • 不要用庫

    假裝不知道有些庫已經直接在你的開發工具中引入了。如果你用VC 編程,忽略MFC 或 STL 的存在,手工編寫所有字符串和數組的實現;這樣有助于保持你的指針技術,并自動阻止任何擴展代碼功能的企圖。
  • 創建一套Build順序

    把這套順序規則做得非常晦澀,讓維護者根本無法編譯任何他的修改代碼。秘密保留?SmartJ?,它會讓??make?腳本形同廢物。類似地,偷偷地定義一個??javac??類,讓它和編譯程序同名。說到大招,那就是編寫和維護一個定制的小程序,在程序里找到需要編譯的文件,然后通過直接調用??sun.tools.javac.Main??編譯類來進行編譯。
  • Make 的更多玩法

    用一個 makefile-generated-batch-file 批處理文件從多個目錄復制源文件,文件之間的覆蓋規則在文檔中是沒有的。這樣,無需任何炫酷的源代碼控制系統,就能實現代碼分支,并阻止你的后繼者弄清哪個版本的 DoUsefulWork() 才是他需要修改的那個。
  • 搜集編碼規范

    盡可能搜集所有關于編寫可維護代碼的建議,例如?SquareBox 的建議?,然后明目張膽地違反它們。
  • 規避公司的編碼規則

    某些公司有嚴格的規定,不允許使用數字標識符,你必須使用預先命名的常量。要挫敗這種規定背后的意圖太容易了。比如,一位聰明的 C 程序員是這么寫的:

    #define K_ONE 1

    #define K_TWO 2?

    #define K_THOUSAND 999

  • 編譯器警告

    一定要保留一些編譯器警告。在 make 里使用 “-” 前綴強制執行,忽視任何編譯器報告的錯誤。這樣,即使維護代碼的程序員不小心在你的源代碼里造成了一個語法錯誤,make 工具還是會重新把整個包build 一遍,甚至可能會成功!而任何程序員要是手工編譯你的代碼,看到屏幕上冒出一堆其實無關緊要的警告,他們肯定會覺得是自己搞壞了代碼。同樣,他們一定會感謝你讓他們有找錯的機會。學有余力的同學可以做點手腳讓編譯器在打開編譯錯誤診斷工具時就沒法編譯你的程序。當然了,編譯器也許能做一些腳本邊界檢查,但是真正的程序員是不用這些特性的,所以你也不該用。既然你用自己的寶貴時間就能找到這些精巧的bug,何必還多此一舉讓編譯器來檢查錯誤呢?
  • 把 bug 修復和升級混在一起

    永遠不要推出什么“bug 修復"版本。一定要把 bug 修復和數據庫結構變更、復雜的用戶界面修改,還有管理界面重寫等混在一起。那樣的話,升級就變成一件非常困難的事情,人們會慢慢習慣 bug 的存在并開始稱他們為特性。那些真心希望改變這些”特性“的人們就會有動力升級到新版本。這樣從長期來說可以節省你的維護工作量,并從你的客戶那里獲得更多收入。
  • 在你的產品發布每個新版本的時候都改變文件結構

    沒錯,你的客戶會要求向上兼容,那就去做吧。不過一定要確保向下是不兼容的。這樣可以阻止客戶從新版本回退,再配合一套合理的 bug 修復規則(見上一條),就可以確保每次新版本發布后,客戶都會留在新版本。學有余力的話,還可以想辦法讓舊版本壓根無法識別新版本產生的文件。那樣的話,老版本系統不但無法讀取新文件,甚至會否認這些文件是自己的應用系統產生的!溫馨提示:PC 上的 Word 文字處理軟件就典型地精于此道。
  • 抵消 Bug

    不用費勁去代碼里找 bug 的根源。只要在更高級的例程里加入一些抵銷它的代碼就行了。這是一種很棒的智力測驗,類似于玩3D棋,而且能讓將來的代碼維護者忙乎很長時間都想不明白問題到底出在哪里:是產生數據的低層例程,還是莫名其妙改了一堆東西的高層代碼。這一招對天生需要多回合執行的編譯器也很好用。你可以在較早的回合完全避免修復問題,讓較晚的回合變得更加復雜。如果運氣好,你永遠都不用和編譯器前端打交道。學有余力的話,在后端做點手腳,一旦前端產生的是正確的數據,就讓后端報錯。
  • 使用旋轉鎖

    不要用真正的同步原語,多種多樣的旋轉鎖更好 -- 反復休眠然后測試一個(non-volatile的) 全局變量,直到它符合你的條件為止。相比系統對象,旋轉鎖使用簡便,”通用“性強,”靈活“多變,實為居家旅行必備。
  • 隨意安插 sync 代碼

    把某些系統同步原語安插到一些用不著它們的地方。本人曾經在一段不可能會有第二個線程的代碼中看到一個臨界區(critical section)代碼。本人當時就質問寫這段代碼的程序員,他居然理直氣壯地說這么寫是為了表明這段代碼是很”關鍵“(也是critical)的!
  • 優雅降級

    如果你的系統包含了一套 NT 設備驅動,就讓應用程序負責給驅動分配 I/O 緩沖區,然后在任何交易過程中對內存中的驅動加鎖,并在交易完成后釋放或解鎖。這樣一旦應用非正常終止,I/O緩存又沒有被解鎖,NT服務器就會當機。但是在客戶現場不太可能會有人知道怎么弄好設備驅動,所以他們就沒有選擇(只能請你去免費旅游了)。
  • 定制腳本語言

    在你的 C/S 應用里嵌入一個在運行時按字節編譯的腳本命令語言。
  • 依賴于編譯器的代碼

    如果你發現在你的編譯器或解釋器里有個bug,一定要確保這個bug的存在對于你的代碼正常工作是至關重要的。畢竟你又不會使用其他的編譯器,其他任何人也不允許!
  • 一個貨真價實的例子

    下面是一位大師編寫的真實例子。讓我們來瞻仰一下他在這樣短短幾行 C 函數里展示的高超技巧。

    void* Realocate(void*buf, int os, int ns)

    {

    void*temp;

    temp = malloc(os);?

    memcpy((void*)temp, (void*)buf, os);?

    free(buf);?

    buf = malloc(ns);?

    memset(buf, 0, ns);?

    memcpy((void*)buf, (void*)temp, ns);?

    return buf;

    }

    • 重新發明了標準庫里已有的簡單函數。
    • Realocate?這個單詞拼寫錯誤。所以說,永遠不要低估創造性拼寫的威力。
    • 無緣無故地給輸入緩沖區產生一個臨時的副本。
    • 無緣無故地造型。 memcpy() 里有 (void*),這樣即使我們的指針已經是 (void*) 了也要再造型一次。另外這樣可以傳遞任何東西作為參數,加10分。
    • 永遠不必費力去釋放臨時內存空間。這樣會導致緩慢的內存泄露,一開始看不出來,要程序運行一段時間才行。
    • 把用不著的東西也從緩沖區里拷貝出來,以防萬一。這樣只會在Unix上產生core dump,Windows 就不會。
    • 很顯然,os 和 ns 的含義分別是”old size" 和 "new size"。
    • 給 buf 分配內存之后,memset 初始化它為 0。不要使用 calloc(),因為某些人會重寫 ANSI 規范,這樣將來保不齊 calloc() 往 buf 里填的就不是 0 了。(雖然我們復制過去的數據量和 buf 的大小是一樣的,不需要初始化,不過這也無所謂啦)
  • 如何修復 "unused variable" 錯誤

    如果你的編譯器冒出了 "unused local variable" 警告,不要去掉那個變量。相反,要找個聰明的辦法把它用起來。我最喜歡的方法是:??
    i = i;
  • 大小很關鍵

    差點忘了說了,函數是越大越好。跳轉和 GOTO 語句越多越好。那樣的話,想做任何修改都需要分析很多場景。這會讓維護代碼的程序員陷入千頭萬緒之中。如果函數真的體型龐大的話,對于維護代碼的程序員就是哥斯拉怪獸了,它會在他搞清楚情況之前就殘酷無情地將他們踩翻在地。
  • 一張圖片頂1000句話,一個函數就是1000行

    把每個方法體寫的盡可能的長 -- 最好是你寫的任何方法或函數都沒有少于1000行代碼的,而且里邊深度嵌套,這是必須的。
  • 少個文件

    一定要保證一個或多個關鍵文件是找不到的。利用includes 里邊再 includes 就能做到這一點。例如,在你的 main 模塊里,你寫上:

    #include <stdcode.h>

    Stdcode.h 是有的。但是在 stdcode.h 里,還有個引用:

    #include "a:\\refcode.h"

    然后,refcode.h 就沒地方能找到了。

  • 到處可寫,無處可讀

    至少要把一個變量弄成這樣:到處被設置,但是幾乎沒有哪里用到它。不幸的是,現代編譯器通常會阻止你做相反的事:到處讀,沒處寫。不過你在C 或 C 里還是可以這樣做的。
  • 原始博文發布于:?Roedy Green's Mindproducts (http://mindprod.com/unmain.html?)。

    轉載于:https://www.cnblogs.com/3Tai/p/4126952.html

    總結

    以上是生活随笔為你收集整理的如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    精品影院 | 亚洲电影久久 | 精品女同一区二区三区在线观看 | 人人要人人澡人人爽人人dvd | 玖玖在线视频观看 | 国产麻豆视频免费观看 | 国产品久精国精产拍 | 六月激情丁香 | 人人干干人人 | 亚洲精品视频在线观看免费 | 日韩精品免费在线视频 | 国产精品ⅴa有声小说 | 久久综合色8888 | 久久久久久久免费看 | 波多在线视频 | 久久黄色精品视频 | 在线精品亚洲一区二区 | 中文字幕一区二区在线播放 | 久99久中文字幕在线 | 天天操天天爱天天爽 | av在线小说 | 国产精品青青 | 亚洲作爱视频 | 欧美福利久久 | 人人dvd| 中文字幕在线观看视频一区二区三区 | 天堂av在线免费观看 | 亚洲成人资源网 | www.夜夜| 国产成人精品一区二区 | 高清在线一区二区 | 国产视频精品网 | 精品成人免费 | 一区二区三区精品在线视频 | 日韩av线观看 | 免费久久久 | 亚洲精品一区二区三区在线观看 | 福利电影久久 | 日韩电影精品 | 天无日天天操天天干 | 91免费观看视频网站 | 天天爽人人爽 | 91av电影网| 狠狠干综合网 | 亚洲视频在线视频 | 精品在线观看一区二区 | 欧美福利网站 | 日日夜夜网站 | wwwwww色 | 手机av在线免费观看 | 久章草在线观看 | 久久久高清视频 | 97超碰中文字幕 | 亚洲资源在线网 | 欧美日韩一区二区三区在线免费观看 | av网站在线免费观看 | 欧美色伊人 | 免费看国产曰批40分钟 | 在线观看中文字幕2021 | 99热播精品| 午夜精品婷婷 | 国产91勾搭技师精品 | 人人爽人人香蕉 | av大全在线免费观看 | 国产午夜不卡 | 亚洲精品欧美专区 | 成人性生爱a∨ | 日韩精品一区二区久久 | 久久99偷拍视频 | 久久精品第一页 | 狠狠天天| av不卡网站 | 日韩网站在线看片你懂的 | 国产精品99久久久 | 国产精品久久久久久久久久久久午 | 国产精品成人一区二区三区吃奶 | 亚洲91av| 超碰人人超 | 亚洲一区二区三区四区在线视频 | 国产精品二区在线 | 成人免费看片网址 | 一区二精品 | 69国产成人综合久久精品欧美 | 国产不卡av在线 | 午夜国产一区二区 | 九九在线视频 | 日韩三级.com| 久久久精品欧美一区二区免费 | 最新一区二区三区 | 天天操夜夜叫 | www.五月婷婷| 在线视频99 | 在线观看中文字幕第一页 | 天天射网| 久久久精品一区二区三区 | 久久久久成人精品亚洲国产 | 狠狠色丁香婷婷综合视频 | 国产精品久久久久久久久久东京 | 天天操狠狠干 | 天天干天天做天天操 | 色先锋av资源中文字幕 | 国产精品乱码久久久 | av在线免费播放网站 | 中文字幕资源在线 | 国产美女主播精品一区二区三区 | 成人免费在线电影 | 日韩一二区在线 | 国产精品久久久久久久99 | 欧美日产一区 | 国产精品嫩草影视久久久 | 99精品视频精品精品视频 | 在线影院av | 国内成人精品2018免费看 | 亚洲精品高清视频在线观看 | 天天插天天 | 国产亚洲永久域名 | 国产一级性生活 | 久草在线视频首页 | 麻豆视频国产 | 91综合视频在线观看 | 久久蜜臀一区二区三区av | 色综合久久久久久中文网 | 激情久久伊人 | 男女靠逼app| 国产成人无码AⅤ片在线观 日韩av不卡在线 | 男女男视频 | www黄在线 | 看黄色.com | 国产原创在线 | 天天插狠狠插 | zzijzzij亚洲成熟少妇 | 久久久综合九色合综国产精品 | 国产精品久久人 | 午夜影视一区 | 欧美色就是色 | 亚洲午夜精品在线观看 | 久久av一区二区三区亚洲 | 国产99一区二区 | 特级xxxxx欧美 | 婷婷婷国产在线视频 | 国产毛片在线 | 黄色录像av | 国产网站av| 色丁香综合 | 在线观看亚洲电影 | a极黄色片 | 欧美性久久久久久 | 免费看日韩片 | 久久久久国产精品视频 | 欧美日韩国产mv | 国产福利一区二区三区视频 | av黄在线播放 | 亚洲第一伊人 | 久久久www成人免费精品 | 精品国产一区二区三区久久影院 | 国产资源在线视频 | 亚洲第一av在线 | 成人黄色电影在线播放 | 亚洲精品免费视频 | 久久精品久久综合 | 免费久久久 | 中文字幕av在线电影 | 一区二区视频在线看 | 在线日韩视频 | 国产精品久久99精品毛片三a | 午夜成人免费影院 | 2019中文最近的2019中文在线 | a在线播放 | 五月天综合网站 | 中文字幕一区2区3区 | 国产成人亚洲精品自产在线 | 超碰97免费 | 国内精品一区二区 | 精品国产一区二区三区四区在线观看 | 国产精品色 | 伊人影院得得 | 久久久久久久久久久高潮一区二区 | 免费高清影视 | 日韩午夜电影院 | 国产在线观看一 | 午夜精品久久久久久久久久 | 亚洲综合视频在线播放 | www成人精品 | 精品不卡av | 人人射人人插 | 国产精品免费大片视频 | 久久免费高清 | 亚洲综合色av | 中文字幕在线观看三区 | 婷婷五月情| 欧美日韩中文字幕在线视频 | 欧美午夜精品久久久久久浪潮 | 91色吧| 免费黄在线看 | 欧美性极品xxxx娇小 | 成人国产综合 | 国产精品福利一区 | 日韩专区在线观看 | 伊人天堂网 | 国产精品久久久久久久久费观看 | 爱av在线网 | 欧美伦理一区 | 国外av在线| 99国产精品久久久久久久久久 | www.日日操.com | 狠狠狠色丁香婷婷综合久久五月 | 黄色高清视频在线观看 | 国产涩涩网站 | 开心激情五月网 | 成人h视频 | 日本精品视频在线 | 亚洲午夜大片 | 四虎海外影库www4hu | 国产91免费在线 | 久久久国产影视 | 97视频免费在线观看 | 日韩有码欧美 | 天天鲁天天干天天射 | 婷婷婷国产在线视频 | 中文字幕在线免费观看 | 欧美最猛性xxxxx免费 | 973理论片235影院9 | 久久免费国产精品1 | 在线观看视频福利 | 99久久婷婷 | 三级视频日韩 | 久久久国产99久久国产一 | 精品国产乱码 | 久久精品一区二区三区国产主播 | 色视频网页 | avhd高清在线谜片 | 一区 二区电影免费在线观看 | 天天爱天天插 | 99热这里只有精品国产首页 | 中字幕视频在线永久在线观看免费 | 日韩一区二区三区免费电影 | 色婷婷在线观看视频 | 国产精品刺激对白麻豆99 | 中文字幕丝袜制服 | 欧美日韩免费视频 | a久久久久 | 91黄色在线视频 | 99re8这里有精品热视频免费 | 欧美日韩国产一区二 | av免费电影在线 | 国产精品视频最多的网站 | 日韩欧美综合视频 | 国产美女视频一区 | 精品国内自产拍在线观看视频 | 香蕉在线视频观看 | 日韩激情三级 | 国产一级精品视频 | 国产69精品久久久久99 | 色网站在线观看 | 国产午夜剧场 | 黄色国产大片 | www.久久com | 福利视频第一页 | 最近日本mv字幕免费观看 | 一区二区三区四区五区在线视频 | 人人插人人艹 | 午夜国产福利在线 | 亚洲天天看 | 欧美午夜精品久久久久久孕妇 | 久久免费视频网站 | 久久国产精品第一页 | 日本在线中文在线 | 国产亚洲va综合人人澡精品 | 91看片在线免费观看 | 国产欧美精品一区二区三区四区 | 色婷婷激情电影 | 一区二区三区国产欧美 | 97电影网手机版 | 亚洲日日日 | 国产精品久久电影网 | 亚洲第二色 | 免费日韩在线 | 男女拍拍免费视频 | 99综合影院在线 | 中文字幕 影院 | 亚洲午夜久久久综合37日本 | 国产理伦在线 | 日韩手机在线观看 | 国产精品porn | 日本中文字幕在线视频 | 久精品一区 | 日韩中文字 | 亚洲成av人片一区二区梦乃 | 日韩深夜在线观看 | 国产aa免费视频 | 黄在线免费看 | 亚洲视频www| 国产在线一区二区三区播放 | 久久精品视频一 | 五月开心六月伊人色婷婷 | 国产一区欧美日韩 | 日韩电影在线观看一区 | 国产精品欧美久久久久天天影视 | 一级黄色片在线免费看 | 丁香婷五月 | 国产色婷婷精品综合在线手机播放 | 人人草人 | 日日天天 | 99草视频 | 成人一区二区三区中文字幕 | 黄色片软件网站 | 久久精品女人毛片国产 | 黄色软件大全网站 | 日韩精品一区二区不卡 | 亚洲精品久久久久中文字幕二区 | 超碰在线最新 | 天天天在线综合网 | 91麻豆国产福利在线观看 | 五月婷婷丁香六月 | 欧美一级免费黄色片 | 久久免费福利 | 91视频在线看 | 国产一级高清视频 | 伊人久久国产 | 日韩在线观看视频中文字幕 | 日韩色综合| 精品国产一区二区三区噜噜噜 | 免费在线观看污 | 久久一级电影 | 激情五月亚洲 | 一区二区三区电影大全 | 色.com| 91资源在线免费观看 | 天天干天天操天天搞 | 九九热精品视频在线观看 | 欧美精品在线观看 | 欧美日韩另类在线 | 天天天操操操 | 91在线视频网址 | 日韩在线大片 | 亚洲一级国产 | 国产乱码精品一区二区三区介绍 | 欧洲一区二区在线观看 | 国产精品自产拍在线观看 | 日日夜夜免费精品 | 国产91亚洲 | 精品国产免费一区二区三区五区 | 黄色三级网站在线观看 | 久久精品久久久久 | 亚洲五月婷 | 有没有在线观看av | 国产黄大片 | 国产成人不卡 | 国产亚洲久一区二区 | 成人动漫一区二区三区 | 超碰免费公开 | 日本激情动作片免费看 | 日韩精品一区二区在线观看视频 | 在线成人免费电影 | 人人爽人人av | 精品久久美女 | 日韩大片在线播放 | 激情在线网| 国产精品一区二区久久国产 | 在线观看免费一级片 | 国产成人精品午夜在线播放 | 97在线影视| 久久精品黄 | 丰满少妇在线观看资源站 | av片中文| 97碰碰视频 | av在线免费网站 | 中文字幕在线免费观看视频 | 久久免费视频在线观看 | 国产精品久久久久久久久久妇女 | 久久艹精品 | 婷婷在线播放 | 四虎成人精品永久免费av九九 | 精品一二三区 | 久艹视频免费观看 | 午夜国产福利在线 | 黄色av一区二区三区 | 亚洲一级理论片 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 黄色的片子| 久产久精国产品 | 黄色中文字幕 | 成人国产精品免费观看 | 西西4444www大胆视频 | 国产96视频 | 天天综合天天做天天综合 | 亚洲永久精品在线观看 | 婷婷综合在线 | 久草免费看 | 天天干天天干天天射 | 四虎www com| 三级在线视频播放 | 玖玖国产精品视频 | 日本久久不卡视频 | 亚洲精品乱码久久久久v最新版 | 中文av字幕在线观看 | 一区二区三区影院 | 色播五月激情综合网 | 亚洲精品国产精品国自产观看 | 午夜视频免费播放 | 欧美日本三级 | 欧美精品九九99久久 | 日日夜夜天天综合 | 中文字幕在线观看视频网站 | 久草在线视频网 | 久久久久久久免费观看 | 久久综合干 | 久久黄色片子 | 99热国产在线 | 亚洲一片黄| 久久99九九99精品 | 久久综合给合久久狠狠色 | 天天翘av | 丁香五月网久久综合 | 日韩视频区| 四虎国产精品成人免费4hu | 91九色在线观看 | 日韩在线观看影院 | 天天干天天看 | 精品国产一区二区三区久久 | 高清av免费看 | 91大神电影 | 国产成人精品免费在线观看 | 新版资源中文在线观看 | 伊人亚洲综合网 | 欧美性免费 | 国产精品18久久久久久久 | 99久久久久 | 亚洲综合在线五月 | 国产精品99久久99久久久二8 | 久久综合精品国产一区二区三区 | 日韩成人高清在线 | 国产在线精品国自产拍影院 | 在线a人片免费观看视频 | 97国产小视频 | 日韩免费在线网站 | 日韩av片免费在线观看 | 六月激情丁香 | 久久九精品| 在线视频一区二区 | 蜜臀久久99静品久久久久久 | 久久视频网址 | 黄色小说免费观看 | 天天射天天 | 久久久久国 | 精品一区91| 色综合中文字幕 | 日韩在线资源 | 精品国产一区二区三区日日嗨 | 久久国产精品一二三区 | 一区二区三区免费看 | 亚洲国产精品电影在线观看 | 91精品国自产在线观看 | 久久狠狠亚洲综合 | 成人日批视频 | 91免费试看 | 午夜色站 | 欧美日韩三级在线观看 | 在线观看91视频 | 久草视频看看 | 国产精品第54页 | 波多野结衣视频在线 | av大全免费在线观看 | 91精品办公室少妇高潮对白 | 九月婷婷人人澡人人添人人爽 | 五月开心六月婷婷 | 国产精品美女久久久久aⅴ 干干夜夜 | 国产在线国偷精品产拍免费yy | 久久天天躁 | 精品欧美一区二区精品久久 | 一色屋精品视频在线观看 | 精品国产一区二区三区av性色 | 国产热re99久久6国产精品 | 亚洲第一久久久 | 玖玖视频 | 午夜私人影院久久久久 | 成人看片 | 97在线观看视频免费 | 国产日韩精品一区二区三区在线 | 又色又爽的网站 | 91九色最新地址 | 特级黄色片免费看 | 成人久久网 | 色偷偷人人澡久久超碰69 | 精品亚洲一区二区 | 国产成人精品综合 | 波多野结衣电影一区二区三区 | 亚洲精品美女在线观看播放 | 成人黄色免费在线观看 | 欧美伦理一区 | 精品一区二区6 | 久草免费在线视频观看 | 日韩免费视频线观看 | 丁香婷婷综合激情 | 久久综合久久综合久久综合 | 中文字幕国产精品 | 丁香九月激情 | 日韩视频精品在线 | 最近高清中文字幕在线国语5 | 六月丁香综合 | 五月情婷婷 | 成人免费在线观看入口 | 国产三级精品三级在线观看 | 日韩欧美黄色网址 | 男女激情麻豆 | 国产亚洲欧洲 | 插插插色综合 | 91亚洲国产成人 | 久久久久久久久久久免费av | 久久久久亚洲精品国产 | 久久91久久久久麻豆精品 | 免费成视频 | 99精品在线视频观看 | 欧美一级日韩三级 | 91成人蝌蚪| 天天爽天天爽夜夜爽 | 国产一级视屏 | 中文字幕免费国产精品 | 国产精品久久久久三级 | 五月婷在线播放 | 亚洲精品乱码久久久久久按摩 | 日本精品视频在线 | 亚洲最大av网 | 中文字幕888| 青青河边草手机免费 | 久久99免费观看 | 亚洲永久字幕 | 久久这里有 | 久免费视频 | 综合网久久 | 黄色一级在线观看 | 黄色大全视频 | 色视频网址 | 天天干夜夜操视频 | 国产成人一区二区三区 | 日韩在线电影观看 | 色操插| 久久国产精品精品国产色婷婷 | 国产一区自拍视频 | 国产伦精品一区二区三区无广告 | 欧美色操 | 成人在线播放免费观看 | 在线观看视频福利 | 国产一级黄色片免费看 | 天天综合入口 | 久久99精品久久久久久秒播蜜臀 | 在线看一区 | 国产精品热| 日本三级大片 | 99在线视频免费观看 | 高清日韩一区二区 | 国产精品毛片久久久 | 国产精品欧美在线 | 国产精品免费小视频 | 天天激情 | 91系列在线 | 国产日韩在线一区 | 成人一区在线观看 | 久久国产精品精品国产色婷婷 | 色噜噜狠狠色综合中国 | 国产福利在线不卡 | 中文字幕在线观看一区 | 国产精品国产精品 | 久草视频在线免费 | 91九色在线观看 | 操操操人人 | 日韩久久久久久久久久 | 天天操综 | 亚洲激情视频在线观看 | 国产精品自产拍 | 欧美日韩视频在线一区 | 在线观看黄色大片 | 日韩视频在线不卡 | 成人a级免费视频 | 久久久久高清 | 久久精品中文视频 | 911精品美国片911久久久 | 99视屏| 国产精品久久久久影院 | 91精品久久久久久久久久久久久 | 中文字幕在线一区二区三区 | 一本一道久久a久久综合蜜桃 | 日日夜夜综合网 | 九色91福利| av黄色大片 | 国产手机视频在线 | 色999精品 | 欧美在线不卡一区 | 久草干| 超碰97中文| 亚洲欧美成人综合 | 看片黄网站 | 天天激情在线 | 激情视频在线观看网址 | 欧美日韩精品免费观看 | 麻豆视频免费在线观看 | 色偷偷88888欧美精品久久久 | 中文字幕成人网 | 米奇影视7777| 91精品国产网站 | 99re久久资源最新地址 | 亚洲激情六月 | 黄色中文字幕 | 国产女人40精品一区毛片视频 | 日本三级人妇 | 岛国av在线 | 免费日韩一区 | 亚洲区另类春色综合小说校园片 | 久久九九九九 | 992tv又爽又黄的免费视频 | 亚洲精品在线视频播放 | 国产在线不卡一区 | 99视频精品免费观看, | 久精品视频在线 | 久要激情网 | 久久9999久久| 国产精品久久久久久久久岛 | 久久久网址 | 青春草视频 | 欧美日韩在线精品 | 国产一区二区三区高清播放 | 日韩视频免费观看高清 | 精品一区二区三区四区在线 | 亚洲丝袜一区二区 | 97久久精品午夜一区二区 | 最新日本中文字幕 | 国产美腿白丝袜足在线av | 五月婷婷视频在线 | 久草在线手机观看 | 人人网av| 久久伦理电影网 | 成年人电影免费在线观看 | 国产精品国产三级国产专区53 | 亚洲一级在线观看 | 久久乐九色婷婷综合色狠狠182 | 69久久99精品久久久久婷婷 | 99精品一区 | 国模精品一区二区三区 | 91chinese在线| 丝袜美女视频网站 | av韩国在线 | 免费国产在线视频 | av观看免费在线 | 欧美精品九九99久久 | 日韩在线免费高清视频 | 日韩久久精品一区 | 日本夜夜草视频网站 | 99久久99久久 | 久久tv视频 | 色婷婷骚婷婷 | 91精品色 | 日本黄区免费视频观看 | 免费人成在线观看网站 | 国产区在线视频 | 精品久久久久久久久久国产 | 欧美日韩精品影院 | 不卡视频国产 | 91在线免费观看网站 | 免费日韩三级 | 久久久久久久久久久精 | 亚洲精品午夜aaa久久久 | 日本一区二区三区免费观看 | 青青草国产在线 | 婷婷久久网站 | 免费亚洲婷婷 | 中文一区在线观看 | 国产精品一区二区免费视频 | 久草综合视频 | 国产精品久久电影观看 | 久久久电影网站 | 激情丁香综合五月 | 五月天久久久久 | 少妇18xxxx性xxxx片 | 最新国产精品拍自在线播放 | 不卡的av在线播放 | 99自拍视频在线观看 | 久久久久免费精品国产小说色大师 | 不卡的av在线 | 色视频网站在线 | 中文资源在线播放 | 91久久一区二区 | 人人澡澡人人 | 久国产在线播放 | 国产一级一片免费播放放 | 日韩精品久久久久久 | 久久精品国产成人精品 | 亚洲日本国产精品 | 江苏妇搡bbbb搡bbbb | 欧美一区二区在线 | 久久成人麻豆午夜电影 | 精品网站999www | 看污网站 | 在线国产福利 | 欧美日韩在线视频一区 | 日韩欧美成| 色婷婷狠 | 99久久影院| 天天色天天骑天天射 | 日韩视频1| 亚洲国产精品小视频 | 久久国产精品免费视频 | 片网址| 在线v | 欧美日韩在线播放一区 | 亚洲五月综合 | 黄色毛片在线 | 国产日韩在线观看一区 | 日韩视| 久久久久久久久电影 | 8090yy亚洲精品久久 | 国色天香永久免费 | 国产精品一区在线观看 | 五月激情五月激情 | www.日本色 | 色噜噜狠狠狠狠色综合 | 91成人在线看 | 最近乱久中文字幕 | 九色琪琪久久综合网天天 | 91亚洲欧美 | 欧美日韩免费一区二区三区 | 一区二区三区观看 | 九九爱免费视频在线观看 | 开心丁香婷婷深爱五月 | 最新超碰在线 | 2022久久国产露脸精品国产 | 欧美 日韩 国产 成人 在线 | 超碰成人av| 国产精品欧美久久久久天天影视 | 在线亚洲日本 | 国产黄免费看 | 亚洲永久国产精品 | 免费日韩精品 | 国产在线欧美 | 精品一区三区 | 在线免费黄网站 | 成人黄性视频 | 91福利国产在线观看 | 国产精品一区二区av | 天天激情在线 | 国产精品福利久久久 | 久99精品 | 麻豆视频免费在线 | 国产不卡片| 久久久久久激情 | 久草香蕉在线视频 | 欧美亚洲另类在线视频 | 中文在线最新版天堂 | 欧美日韩高清在线 | 国产在线观看xxx | 国产亚洲91| 伊人狠狠色丁香婷婷综合 | 特级黄录像视频 | 国产精品毛片久久久久久 | 国产视频在线观看一区二区 | 精品国产一区二区在线 | 最新中文字幕在线播放 | 99久久er热在这里只有精品66 | 久久夜色精品国产欧美一区麻豆 | 激情在线五月天 | 九九热视频在线播放 | 国内三级在线观看 | 亚洲黄色大片 | 在线视频免费观看 | 国产精品久久久一区二区三区网站 | 亚洲毛片一区二区三区 | 婷婷丁香久久五月婷婷 | 色网站免费在线观看 | 日韩免费视频观看 | 97电院网手机版 | 免费观看十分钟 | 亚洲国产日韩欧美在线 | 国产一二区免费视频 | 99久久夜色精品国产亚洲 | 免费观看黄色12片一级视频 | 国产精品久久久久久久久久免费看 | 久久精品网站视频 | 97在线精品 | 超碰97久久 | 国产精品视频不卡 | 欧美精品久久久久久久久久久 | 欧美色图视频一区 | av电影免费在线看 | 欧美精品在线观看免费 | 日韩综合在线观看 | 操一草 | 色综合天天天天做夜夜夜夜做 | 99久久爱| 国产视频一区在线 | 很污的网站| av在线一二三区 | 天天操狠狠操 | 免费av网址在线观看 | 天天插综合网 | 婷五月激情 | 久久综合五月婷婷 | 国产一区 在线播放 | 日韩一区在线免费观看 | 黄色片网站大全 | 人人爽人人爽人人片av | 欧美成人播放 | 丁香婷婷综合色啪 | h久久| 色操插 | 久久精品国产一区二区三 | 久草爱视频| 欧美 日韩 成人 | 色婷婷久久久 | 视频一区视频二区在线观看 | 国产1区在线观看 | 天天综合亚洲 | 欧美色图东方 | 国产精品久久久电影 | 国产精品无av码在线观看 | 亚洲最新毛片 | www.天天干 | 99久久夜色精品国产亚洲 | 91精选| 日韩精品免费一线在线观看 | a黄在线观看 | 婷婷久操 | 成人一区在线观看 | 狠狠干干 | 九九视频这里只有精品 | 国产成人一区在线 | 国产黄视频在线观看 | 一区二区三区视频 | 成人免费在线网 | 久久久久国产一区二区三区 | 在线日韩一区 | 亚洲成人av在线播放 | 色人久久 | 91亚洲夫妻| 91成人在线观看高潮 | 999国内精品永久免费视频 | 在线观看亚洲视频 | 天天综合日日夜夜 | 一本—道久久a久久精品蜜桃 | 91porny九色91啦中文 | 婷婷五情天综123 | 日本黄色大片免费看 | 亚洲专区路线二 | 九九热在线播放 | 欧美巨乳波霸 | 国产精品久久久久久妇 | 欧美日韩不卡一区二区 | 香蕉影院在线播放 | 国产精品精品 | 久久久久国产精品免费免费搜索 | 久久久久 免费视频 | 精品伊人久久久 | 久久久免费毛片 | 中文字幕一区二区三区视频 | 欧美性生活小视频 | 国产日韩精品一区二区三区 | 五月婷在线观看 | 久久久久久国产精品亚洲78 | 成人免费亚洲 | 欧美午夜激情网 | 丝袜美女视频网站 | 中文字幕一区二区在线播放 | 国产69精品久久久久9999apgf | 国产97色 | 欧美粗又大 | 亚洲国产av精品毛片鲁大师 | 99热国产精品 | 国产精品久久久久久一区二区三区 | 欧美日韩视频精品 | 81精品国产乱码久久久久久 | 久久久免费精品 | 久久国产精品一区二区三区四区 | 国产传媒中文字幕 | 日韩欧美中文 | 91麻豆看国产在线紧急地址 | 久久1区 | 九九视频一区 | 波多野结衣在线观看一区二区三区 | 亚洲狠狠婷婷综合久久久 | 亚洲精品女人 | 中文字幕在线观看完整 | 日韩大片在线看 | 欧美在线视频精品 | 国产精品美女久久久网av | 美女视频一区 | 久久99精品久久久久婷婷 | 伊人亚洲精品 | 在线观看视频一区二区 | 91九色最新 | 久久视讯 | 美女网站视频久久 | 日韩三级精品 | 天堂激情网 | 国产高清亚洲 | 免费又黄又爽的视频 | 日韩av进入 | 国产专区第一页 | 91福利专区 | 亚洲一区二区三区91 | 99视频国产精品 | www..com毛片 | 日本在线观看中文字幕 | 人人玩人人添人人 | 97超碰总站| 91丨九色丨蝌蚪丨老版 | 欧美性受极品xxxx喷水 | 国产97视频在线 | 四虎在线永久免费观看 | 黄色大全在线观看 | 欧美一级免费在线 | 国产一级在线视频 | 狠狠狠狠狠狠操 | 欧美一区二区三区激情视频 | 成人网页在线免费观看 | 久久一区二区三区超碰国产精品 | 欧美日韩一区二区三区免费视频 | av成人动漫在线观看 | 欧美另类成人 | 久久不见久久见免费影院 | 国产精品久久久久久久久毛片 | 四虎在线免费视频 | 久草视频国产 | 精品国产网址 | 免费看片成人 | 成人午夜精品久久久久久久3d | 天天拍天天色 | 国产一级片免费观看 | 日本少妇高清做爰视频 | 亚洲aⅴ在线 | 成人免费网站视频 | 久久精品9 | 精品视频在线播放 | 国产看片免费 | 豆豆色资源网xfplay | 久久久受www免费人成 | 国产午夜三级一区二区三桃花影视 | 日韩精品免费在线观看视频 | 日韩免费观看一区二区三区 | 国产精品免费久久久久影院仙踪林 | 日本性久久 | 91一区在线观看 | 日韩在线视频免费播放 | 99热.com| 国产一二区精品 | 最新成人av | 丁香婷婷电影 | 国产精品一区二区av | 欧美激情va永久在线播放 | av成人在线电影 | 色香com.| 五月精品 | 久久综合成人网 | 亚洲aⅴ一区二区三区 | 亚洲四虎| 国产黄色精品在线观看 | 精品自拍av| 97成人精品区在线播放 | 精品久久久久久久久中文字幕 | 中文字幕在线看视频国产中文版 | 日本午夜在线观看 | 久久久久亚洲最大xxxx | 成人免费在线电影 | 日韩成人免费观看 | 日韩欧美黄色网址 | 一区二区三区久久 | 久久久福利 | 久久在线免费观看 | 国产成人中文字幕 | 91精品久久久久久久91蜜桃 | 免费三级影片 | 天天干天天草天天爽 | 亚洲国产久 | 久久区二区 | 97超碰人人澡 | www.五月天激情 | 久久免费视频4 | av中文字幕剧情 | 亚洲精品乱码久久久久 | 综合天堂av久久久久久久 | 国产精品自产拍在线观看桃花 | 婷婷激情在线观看 | 中文av资源站 | 日本成人黄色片 | 午夜国产福利在线 | 一级淫片a | 国产aa精品 | 国产区 在线| 国产亚洲欧美精品久久久久久 | 欧美日韩一区久久 | 91理论片午午伦夜理片久久 | 色999视频 | 在线a视频 | 国产精品99久久免费黑人 | 在线观看免费日韩 | 狠狠干狠狠色 | 在线观看成人国产 | 亚洲一区二区天堂 | 国产精品第 | 国产精品入口久久 | 最近中文国产在线视频 |