亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C語言中函數(shù)的聲明、定義及使用的入門教程

2020-05-23 14:12:05
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C語言中函數(shù)的聲明、定義及使用的入門教程,重點(diǎn)講述了main函數(shù)的相關(guān)知識,需要的朋友可以參考下
 

對函數(shù)的“定義”和“聲明”不是一回事。函數(shù)的定義是指對函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)值類型、形參及其類型以及函數(shù)體等,它是一個完整的、獨(dú)立的函數(shù)單位。而函數(shù)的聲明的作用則是把函數(shù)的名字,函數(shù)類型以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時進(jìn)行對照檢查(例如,函數(shù)名是否正確,實(shí)參與形參的類型和個數(shù)是否一致),它不包括函數(shù)體。——譚浩強(qiáng) ,《C程序設(shè)計》(第四版),清華大學(xué)出版社,2010年6月,p182

這段論述包含了許多概念性錯誤,這些概念錯誤在許多C語言書中都同樣普遍存在。為了說明這些錯誤,首先來回顧一下C語言演變和發(fā)展的一些情況。

最早,C語言的代碼可以這樣寫:

main(){ printf("hello,world!/n");}

注意,這段代碼對標(biāo)識符printf沒有進(jìn)行任何說明。這是因?yàn)閜rintf()函數(shù)的返回值為int類型。當(dāng)時的C語言規(guī)定,對于沒有任何說明的函數(shù)名,編譯器會默認(rèn)為返回值為int類型,因此對這樣的函數(shù)名可以不做任何說明。那個時期的C語言,很多情況下int可以不寫。例如main()函數(shù)返回值的類型為int就可以不寫。

但是需要特別說明的是,這種“省勁”的寫法已經(jīng)過時,從C90標(biāo)準(zhǔn)起,這種寫法就步入了被逐步拋棄的過程(盡管當(dāng)時還沒有完全立即廢止)。C99廢除了隱式函數(shù)聲明法則(remove implicit function declaration),另外,省略main()前面的int也已經(jīng)不再容許了。

在C語言早期,盡管有時不需要對函數(shù)名進(jìn)行說明,但有些情況下對函數(shù)名進(jìn)行說明還是必須的,比如:

double sqrt();int main(){ printf("%f/n" , sqrt(9.) );}

這是因?yàn)楹瘮?shù)sqrt()返回值的類型不是int類型而是double類型,編譯器編譯時需要知道sqrt(9.)這個表達(dá)式的類型。

不難注意到這種對函數(shù)名的說明非常簡單,這是最早期的一種函數(shù)類型說明的形式。這種說明只著重說明函數(shù)名是一個函數(shù)及其返回值類型,如果程序員在調(diào)用函數(shù)時存在參數(shù)類型或個數(shù)方面的錯誤編譯器是無法察覺的,因?yàn)楹瘮?shù)類型說明中“()”內(nèi)沒有任何信息。

這種辦法只說明了函數(shù)名與()進(jìn)行運(yùn)算的結(jié)果也就是函數(shù)返回值的數(shù)據(jù)類型,無法進(jìn)一步檢查參數(shù)方面的錯誤是這種寫法的不足之處。

如果不寫函數(shù)類型說明,也可以把函數(shù)定義寫在函數(shù)調(diào)用之前:

double square ( double x) { return x * x ;}int main(void){ printf("%f/n" , square(3.) ); return 0;}

這表明函數(shù)定義也具有對函數(shù)名的類型加以說明的效果,因此從這個意義上來說,函數(shù)定義也是一種對函數(shù)類型的說明。這種辦法可以檢查出函數(shù)調(diào)用時在參數(shù)個數(shù)和類型方面的錯誤。

但是,用這種辦法說明函數(shù)名并不好,因?yàn)檫@樣做在編程時還需要考慮應(yīng)該把哪個函數(shù)定義寫在前面,哪個寫在后面的問題。假如函數(shù)A調(diào)用函數(shù)B,函數(shù)B調(diào)用函數(shù)C,函數(shù)C又調(diào)用函數(shù)A,究竟如何安排函數(shù)定義的順序就會讓人感到無所適從。此外這種辦法也不利于代碼的組織,在由多個源文件組成的源程序時,這種寫法就更會捉襟見肘、漏洞百出。因此,在1990年,C標(biāo)準(zhǔn)借鑒C++語言規(guī)定了一種新的說明函數(shù)名的方法,這就是函數(shù)原型(Function Propotype)式說明函數(shù)類型的方法:

double square ( double ); //或 double square ( double x)int main(void){  printf("%f/n" , square(3.) );  return 0;}double square ( double x) {  return x * x ;}

使用這種辦法,不但可以檢查函數(shù)調(diào)用時參數(shù)類型和個數(shù)方面的錯誤,同時解決了源代碼的組織問題,因?yàn)槌绦騿T不必再考慮該把哪個函數(shù)寫在前面、哪個寫在后面這種無聊的問題了。這種辦法全面地說明了函數(shù)名的數(shù)據(jù)類型。此外要說明的是,把形參及其數(shù)據(jù)類型寫在“()”內(nèi)形式的函數(shù)定義也屬于函數(shù)原型(Function Propotype)的范疇。

由此可見,古老的、不對參數(shù)進(jìn)行任何說明的函數(shù)類型說明方式、函數(shù)定義以及函數(shù)原型式的函數(shù)類型說明方式都具有說明函數(shù)名意義的效用。從這個意義上講它們都是函數(shù)聲明。在C語言中,聲明(Declaration)這個詞的本義就是指定標(biāo)識符的意義和性質(zhì)(A declaration specifies the interpretation and attributes of a set of identifiers.),某個標(biāo)識符的定義(Definition)同時也是這個標(biāo)志符的“聲明”(Declaration)。函數(shù)定義(Function definition)則意指包括函數(shù)體。(A definition of an identifier is a declaration for that identifier that: ……for a function, includes the function body;)。函數(shù)原型則特指包括說明參數(shù)類型的函數(shù)聲明,它同樣包含用這種方式寫出的函數(shù)定義。

現(xiàn)在回過頭來看樣本中的第一句話:“對函數(shù)的“定義”和“聲明”不是一回事”。由于函數(shù)定義本身就是一種函數(shù)聲明,怎么可以說它們不是一回事呢?這句話的邏輯就如同說“男人”和“人”不是一回事。你可以說男人和女人不是一回事,因?yàn)樗麄儧]有交集。但沒法說男人和人不是一回事,因?yàn)槟腥耸侨说淖蛹?,男人就是人的一種,怎么可以說男人和人不是一回事呢?

那么,不帶函數(shù)體的函數(shù)聲明應(yīng)該如何稱呼呢?在C語言中,它們叫被做“函數(shù)類型聲明”(Function type declaration)。函數(shù)類型聲明最主要的特點(diǎn)是聲明了函數(shù)名是一個函數(shù)及其返回值的類型,如果也聲明了參數(shù)的類型,則是函數(shù)原型式的函數(shù)類型聲明。

樣本中的“而函數(shù)的聲明的作用則是把函數(shù)的名字,函數(shù)類型以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時進(jìn)行對照檢查(例如,函數(shù)名是否正確,實(shí)參與形參的類型和個數(shù)是否一致),它不包括函數(shù)體”這句話同樣不通。其主要錯誤是它混淆了“函數(shù)原型式類型聲明”與“函數(shù)聲明”這兩個概念,前一個概念只是后一個概念的子集。函數(shù)聲明中不但包含“函數(shù)類型聲明”,也包含“函數(shù)定義”和老式的“函數(shù)類型聲明”。由于函數(shù)定義本身就是一種函數(shù)聲明,所以無法斷定函數(shù)的聲明是否包括函數(shù)體;而且老式的函數(shù)類型聲明(例如double sqrt();)也屬于函數(shù)聲明,這種函數(shù)聲明并不檢查參數(shù)類型及個數(shù)方面的錯誤。此外函數(shù)聲明也并沒有檢查“函數(shù)名”正確與否的功能。

這段文字中的“函數(shù)類型”這個概念也有錯誤,函數(shù)類型所描述的不但包括函數(shù)返回值類型,也可能一并描述參數(shù)的個數(shù)和類型(如果是函數(shù)原型),因此不能與“形參的類型、個數(shù)”相提并論。

現(xiàn)代的C語言的函數(shù)定義和函數(shù)類型聲明都采用函數(shù)原型式的風(fēng)格,C99把舊的非原型形式視為過時,這意味著非原型形式以后可能被禁止。

main()函數(shù)
在各種C語言書上,能看到各式各樣main()函數(shù)的寫法,簡直令人無所適從,這是這么回事?原因主要有兩個:一個是隨著C語言的發(fā)展和演化,main()函數(shù)的寫法也在不斷變化;另外,某些書籍寫法不規(guī)范或誤導(dǎo)的現(xiàn)象也同時存在。

最初main()函數(shù)的寫法非常簡潔,那個時候的C程序員哪怕一個字符似乎都不肯多寫。不知道是因?yàn)楫?dāng)時鍵盤質(zhì)量不好還是因?yàn)榫庉嬈魈愀獾木壒?,那個時代的C程序員似乎驚人地一致崇尚“簡約”——甚至可以說是“至簡”。

main(){ printf("hello,world/n");}

這就是main()函數(shù)最古老的寫法,K&R在他們的經(jīng)典名著《The C Programming Language》中的第一個C語言源程序(1978)。這種寫法是那個時代的主流。

簡直和裸體差不多,連#include<stdio.h>也沒有么?在《The C Programming Language》的第一版中確實(shí)沒有。那個時代的C語言,返回值類型為int的函數(shù)不用聲明。不過在該書的第二版(1988)中這個程序被改成了:

#include <stdio.h>main(){ printf("hello,world/n");}

返回值類型為int的函數(shù)不用聲明的規(guī)則改變了嗎?規(guī)則沒有改變。改變了的是觀念,人們已經(jīng)不再傾向于代碼的“至簡”,而開始傾向于在代碼中交代清楚每一個標(biāo)識符的來龍去脈。從C89開始倡導(dǎo)在函數(shù)調(diào)用之前一定要有函數(shù)聲明,但并沒有強(qiáng)求,而在C99這已經(jīng)是強(qiáng)制性的要求了。由于《The C Programming Language》第二版正值A(chǔ)NSI C標(biāo)準(zhǔn)頒布(1989)前夕出版,所以這種變化也應(yīng)該視為ANSI C標(biāo)準(zhǔn)的傾向性以及K&R對新標(biāo)準(zhǔn)的認(rèn)同。盡管這個例子沒有完全反映出來這種認(rèn)同。

為什么說沒有完全反映出來這種認(rèn)同呢?因?yàn)檫@個main()的定義并沒有按照函數(shù)原型(Function prototype)的方式來寫,C90中規(guī)定不帶參數(shù)的main()函數(shù)應(yīng)該這樣寫:

int main(void) { /*. . .*/}

但同時規(guī)定那個int可以省略。C90把()內(nèi)不寫任何內(nèi)容視為過時的寫法,盡管C90無奈地容忍了它(The use of function declarators with empty parentheses (not prototype-format parameter type declarators) is an obsolescent feature.)。

為什么要容忍?因?yàn)橛性S多老式的代碼還在用。

如果以C99的標(biāo)準(zhǔn)看這個main()寫得如何呢?C99不容許省略int。但同樣只把()內(nèi)不寫任何內(nèi)容視為過時,而沒有完全禁止,可見習(xí)慣力量的頑固。

那又為什么說K&R對新標(biāo)準(zhǔn)的認(rèn)同呢?《The C Programming Language》第二版中的其他函數(shù)定義和函數(shù)類型聲明基本上都改成了函數(shù)原型風(fēng)格。比如,在講解main()函數(shù)的參數(shù)時,K&R把原來的main()函數(shù)

#include <stdio.h>main(argc,argv)int argc;char *argv[];{ /*…… */ return 0;}

改成了:

#include <stdio.h>main(int argc, char *argv[]){ /*…… */ return 0;}

前一個寫法今天已經(jīng)差不多絕跡,后一個main()以今天的眼光來看有些奇怪,main()的參數(shù)是用函數(shù)原型風(fēng)格寫的,但卻沒有寫main()返回值的類型,給人有點(diǎn)半新半舊的感覺。盡管不能說它違背C90(因?yàn)镃90容許不寫main()前面的int),但如果寫上了返回值的類型int,就同時滿足現(xiàn)代C99標(biāo)準(zhǔn)的要求了。

這里出現(xiàn)的“return 0;”是怎么回事?這在現(xiàn)代C語言中已經(jīng)是司空見慣了,它返回給操作系統(tǒng)一個值以表明程序是在何種狀態(tài)下結(jié)束的。但在另一段代碼中,K&R似乎又走得太遠(yuǎn):

#include <stdio.h>main(int argc,char *argv[]){ int found = 0 ; /*……計算found的值 */ return found;}

這個實(shí)在有些“標(biāo)新立異”,居然把計算結(jié)果返回給了操作系統(tǒng),頗有突破常規(guī)之嫌。

那前面幾個沒有“return 0;”的main()函數(shù)會怎么樣?按照C90標(biāo)準(zhǔn),會返回一個不確定的int類型的值,如果確實(shí)不關(guān)心這個返回值是多少,不寫確實(shí)可以。但C99卻要求編譯器在編譯的時候幫忙給補(bǔ)上這個“return 0;”,C99在必須寫int這個問題上沒有遷就懶人,但在這里卻對偷懶的做法給予了遷就。 問:如果確實(shí)不關(guān)心main()函數(shù)的返回值,把main()的返回值定義為void類型如何?我看到許多書上都這樣寫的。

#include <stdio.h>void main(){ printf("This is a C program./n");}

這在C99之前是一種野路子寫法,究竟從哪里冒出來的,無據(jù)可考。但前幾年的主流教科書中這種寫法很常見。K&R(C語言的發(fā)明者)沒有這樣寫過,C90國際標(biāo)準(zhǔn)也不承認(rèn)這種寫法。Bjarne Stroustrup(C++語言的創(chuàng)始人)在他的關(guān)于C++的FAQ中,在回答是否可以寫“void main()”時憤怒地回答說這種寫法在C++和C中都不曾有過。事實(shí)上,很多C語言專家都認(rèn)為“void main()”非常邪惡。

因此,在C99之前,這是不符合標(biāo)準(zhǔn)的寫法。盡管這段代碼的功能似乎是輸出“This is a C program.”,但其實(shí)卻不是一個“C program”。

但是有時這樣寫并沒有產(chǎn)生錯誤啊?首先,C語言的錯誤不一定反應(yīng)在編譯、鏈接或運(yùn)行過程中。你輸出一個垃圾值也可能一路通過編譯、鏈接或運(yùn)行,但這不說明你的代碼沒有錯誤,更不能說明這樣的代碼正確、有意義。其次,這樣的寫法在有些編譯器下程序會產(chǎn)生崩潰或得到警告。這說明這種寫法至少不普遍性適用的??梢哉f,如果不是C99標(biāo)準(zhǔn),這種寫法根本沒有立錐之地。

C99給了這種寫法以立足之地么?從某種意義上也許可以這樣理解。因?yàn)镵&R沒承認(rèn)過這種寫法,C90根本不承認(rèn)這種寫法,C99雖然沒有正式承認(rèn)這種寫法,但為這種寫法留了一個后門:“It shall be defined ……or in some other implementation-defined manner”。這意思就是說,如果編譯器明確聲稱允許void main()這種寫法的話,那么C99不再象C90那樣簡單認(rèn)為這種寫法違背C標(biāo)準(zhǔn)。

但是不管怎么說,這種寫法最多是某些編譯器的一種“方言土語”,如果沒有特殊理由,比如僅僅是工作在某個特殊環(huán)境,且僅僅使用特定的編譯器而根本不考慮程序的可移植性,為什么不寫普遍適用的形式呢?

既然很多C語言專家都認(rèn)為“void main()”非常邪惡,C99為什么包容這種寫法呢?很難確定C99是否就是打算專門想把這種寫法也“收容”在標(biāo)準(zhǔn)之列。因?yàn)槌藇oid main(),還有另外一些main()函數(shù)的寫法被C90排除在標(biāo)準(zhǔn)之外了。而現(xiàn)在,這些寫法在理論上也具備了符合C99標(biāo)準(zhǔn)的可能性。

還有什么樣的main()函數(shù)?很多編譯器都支持下面的main()的寫法:

int main(int argc, char *argv[], char *env[]){ /* */ return 0;}

居然有3個形參,那個env是做什么用的?那個參數(shù)可以使程序獲得環(huán)境變量。

什么叫環(huán)境變量?簡單地講可以理解為操作系統(tǒng)記錄的一些數(shù)據(jù),比如計算機(jī)的名字,操作系統(tǒng)放在哪里等等。應(yīng)用程序在運(yùn)行時可能要用到這些信息,這時可以通過env這個參數(shù)來獲得。

如果編譯器不支持main()的第三個參數(shù)怎么辦?標(biāo)準(zhǔn)庫函數(shù)也可以達(dá)到同樣的目的。

#include <stdlib.h>char *getenv(const char *name);

是否可以說void main()和int main(int argc, char *argv[], char *env[])也符合C99標(biāo)準(zhǔn)呢?恐怕還不能這么說,現(xiàn)在只是不能說這兩種寫法一定不符合C99標(biāo)準(zhǔn)。但這兩種寫法不符合C90標(biāo)準(zhǔn)是確定的,這兩種寫法的可移植性很差也是確定無疑的。C99標(biāo)準(zhǔn)在這里寫的很模糊,沒有進(jìn)一步界定“implementation-defined manner”的含義。除非編譯器聲明遵守C99標(biāo)準(zhǔn),且容許這兩種寫法,否則斷言這兩種寫法符合C99標(biāo)準(zhǔn)屬于空穴來風(fēng)。

有人說“C99建議把main函數(shù)指定為int型”,這種說法對嗎?顯然不對。因?yàn)镃99并非絕對不包容返回值非int類型的main()。正確的說法是,C90要求main()函數(shù)的返回值一定得是int型。但C90容許不寫那個int,而C99則要求必須寫上這個“int”。

下面這種風(fēng)格如何?

#include <stdio.h>int main(){ printf("This is a C program./n"); return 0;}

這個寫法有點(diǎn)不倫不類。返回值的類型int寫了,這個和C89的倡導(dǎo)或C99的要求一致,但是()里面什么都不寫,又與標(biāo)準(zhǔn)的所倡導(dǎo)的風(fēng)格不符,所以說不倫不類。這種寫法目前的標(biāo)準(zhǔn)依然容許,但屬于標(biāo)準(zhǔn)目前尚能容忍的但即將過時的(obsolescent)寫法,被拋棄只是早晚的問題。這種寫法就如同古代的函數(shù)形參的寫法一樣:

main(argc,argv)int argc;char *argv[];{ /*…… */ return 0;}

都屬于歷史的垃圾。

見過在main()的函數(shù)體的“}”之前前寫一句getch();,這個是怎么回事?這個是時代的產(chǎn)物。在PC從DOS時代轉(zhuǎn)變?yōu)閃indows時代的過程中,DOS時代開發(fā)的IDE(主要是TC)無法在運(yùn)行程序后顯示輸出結(jié)果,為了在運(yùn)行后從容仔細(xì)地觀察一下運(yùn)行結(jié)果再返回IED界面,加上了這么一句,人為地延長程序運(yùn)行時間(因?yàn)間etch()會等待用戶輸入一個字符)。但這與main()本身的結(jié)構(gòu)無關(guān)。這條語句不具備普遍意義,只是將就過時的IDE的一種權(quán)宜之計而已。所謂不具備普遍意義是指,第一,真正的程序往往不需要這條語句,就是說這條語句與程序功能無關(guān);第二,getch()這個函數(shù)并不是標(biāo)準(zhǔn)函數(shù),只有個別的編譯器才支持它,在其他編譯器上寫這條語句,很可能行不通。

為什么不用getchar()這個標(biāo)準(zhǔn)庫函數(shù)呢?getchar()的功能和getch()有點(diǎn)區(qū)別,前者會在標(biāo)準(zhǔn)輸出設(shè)備上顯示用戶鍵入的字符,這顯得很不利索,而后者則不會顯示用戶所鍵入的字符,更接近“Press Any Key to continue……”的效果。

有的代碼在main()函數(shù)結(jié)束前寫system("PAUSE");,是否也是這個意思?是的。這也是一種人工制造的“請按任意鍵繼續(xù). . .”,與程序功能結(jié)構(gòu)無關(guān),只是為了方便地觀察輸出結(jié)果。但是這種寫法比調(diào)用getch()要好,因?yàn)閟ystem()函數(shù)是標(biāo)準(zhǔn)庫函數(shù),各個編譯器都提供支持。

有一種說法,“在最新的C99標(biāo)準(zhǔn)中,只有以下兩種定義方式是正確的:”

int main( void ){  /* */ return 0;}

int main( int argc, char *argv[] ){ /* */  return 0;}

這種說法對嗎?

這種說法顯然不對。但可以確認(rèn)的是這兩種定義方式一定正確。不但在C99來說是正確的,以C89來說也是正確的。

還有一種寫法:

int main( void ){ return EXIT_SUCCESS;}

那個EXIT_SUCCESS是怎么回事?

return EXIT_SUCCESS;是與return 0;等價的一種文雅的寫法。EXIT_SUCCESS是在stdlib.h中定義了的符號常量,返回這個值表示程序任務(wù)完成后程序退出。在stdlib.h定義的另一個符號常量EXIT_FAILURE,通常用于程序無法完成任務(wù)而退出。

實(shí)在太眼花繚亂了,需要記住這么多嗎?顯然沒必要。很多東西都是歷史原因遺留下的垃圾。

如果學(xué)習(xí)C語言,應(yīng)該記住或使用哪種呢?顯然是:

int main( void ){  /* */  return 0;}

int main( int argc, char *argv[] ){ /* */  return 0;}

第一,他們普遍適用,不存在可移植性的問題;

第二,就目前看,他們不存在任何過時或即將過時的成分。當(dāng)然,如果喜歡文雅,不寫return 0;而寫EXIT_SUCCESS也可以。 順便說一句,有的學(xué)習(xí)者記不住帶參數(shù)main()函數(shù)兩個形參的名字。其實(shí)這兩個形參的名字也可以自己取,不一定用那兩個名字,只要記住類型就可以了。第二個參數(shù)的類型也可以是char **,這和原來的是等價的。

 



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
丝袜足控免费网站xx网站| 精品成人18| 国产在线精品一区二区不卡| 1769国内精品视频在线播放| 成人免费看片网站| 日本一不卡视频| 极品少妇xxxx偷拍精品少妇| 一级视频在线免费观看| 日本不卡二区| 嫩草影院国产精品| 日本韩国精品一区二区| 国产精品中文有码| 国产欧美日韩综合精品二区| 欧美狂野激情性xxxx在线观| 91免费视频大全| 国产高清中文字幕在线| 四虎精品一区二区| 人人狠狠综合久久亚洲婷婷| 精品成人免费视频| 欧美另类z0zx974| 黄色香蕉视频在线观看| 伊人网综合视频| 91免费版在线看| 美女毛片在线观看| 91系列在线播放| 国产乱人伦偷精品视频不卡| 日韩电影免费在线观看中文字幕| 亚洲三级久久久| 免费在线一区二区三区| 国产精品免费视频久久久| 久草资源站在线观看| 亚洲人午夜射精精品日韩| 久久综合久久综合这里只有精品| 精品国模一区二区三区| 成人免费网站黄| 在线视频不卡一区二区| 中文字幕日韩三级| 亚洲天堂精品在线| 免费av一级片| 国产日韩欧美综合| 黑粗硬长欧美在线视频免费的| 成人精品水蜜桃| 电影天堂最新网址| 99国产超薄肉色丝袜交足的后果| 亚洲欧洲成视频免费观看| 久久亚洲资源中文字| 国产成人精品视频免费| 污的网站在线观看| 亚洲а∨精品天堂在线| 欧美整片在线观看| 国产视色精品亚洲一区二区| 在线播放中文一区| 91在线视频网址| 国产亚洲激情在线| 免费观看一二区视频网站| 美女视频一区| 亚洲成av人片在线观看www| 欧美日韩综合一区| 中文字幕制服诱惑| 婷婷一区二区三区| 韩国版免费三体| 99精品在线播放| 亚洲视频在线免费观看| 毛片在线不卡| 欧美日韩国产中文| 91免费在线播放视频| 亚洲精品国产系列| 亚洲热av色在线播放| 国产伦精品一区二区三区四区视频_| 国产探花一区| 黄色成年人视频在线观看| 中文字幕成人乱码在线电影| 四虎.com| 日韩成人一级大片| 天天躁日日躁狠狠躁超碰2020| 亚洲人成网站777色婷婷| 精品视频一区二区在线| 欧美一级高清片在线观看| caoporen国产精品视频| 精品捆绑调教一区二区三区| www.久久伊人| 欧美另类极品videosbest视| 国产精品美女久久久久久久网站| 久久这里只有精品1| 欧洲精品毛片网站| 男女视频在线观看| 91精品国产高清一区二区三区| 久久久av网站| 91露出在线| 精品久久久久久久久久久久久久久久| 国产视频一区在线| 成人午夜电影网站| 无遮挡h肉3d动漫在线观看| jizz视频| 久久美女艺术照精彩视频福利播放| 成人动漫视频在线观看完整版| 91一区二区在线观看| 2020天天干夜夜爽| 欧美日韩在线一| 尤物九九久久国产精品的特点| 瑟瑟视频在线看| 人妻精品久久久久中文字幕| 亚洲在线观看一区| 波多野在线播放| 电影中文字幕一区二区| 久久99国产精一区二区三区| 日韩免费在线视频观看| 欧美精品三级日韩久久| 美女日批在线观看| 欧美一级淫片播放口| 天堂成人免费av电影一区| 91视频免费在线| 久久久久久av无码免费看大片| 欧美成人二区| blacked蜜桃精品一区| 成人免费淫片在线费观看| 国产原厂视频在线观看| 国产在线视频第一页| 综合伊人久久| www国产视频| 手机看片福利视频| av一本久道久久波多野结衣| 久久久久亚洲精品国产| 日韩av在线直播| 国产精品成人免费精品自在线观看| 中文字幕视频在线免费| 国产高清一区二区| 欧美国产偷国产精品三区| 99久久综合精品| 亚洲一卡二卡三卡四卡五卡| 成人影院一区二区三区| 欧美xxxx14xxxxx性爽| 国产一区二区三区免费在线| 99热这里精品| 国产成人av一区| 91无套直看片红桃在线观看| 日本熟妇色xxxxx日本免费看| 成人影院在线看| 午夜黄色在线观看| 91影院在线免费观看视频| 天堂8中文在线最新版在线| 香蕉影院在线观看| 精品国产露脸精彩对白| 亚洲欧洲国产视频| 综合天天久久| 女人裸体性做爰全过| 精品白丝av| 午夜久久久久久噜噜噜噜| 91精品国产高清久久久久久91| 亚洲色图丝袜| 在线免费观看日韩欧美| 久久综合久久综合这里只有精品| 日韩成人精品一区二区三区| 国产精品22p| 色一情一交一乱一区二区三区| 欧美精品xxxxx| 成人黄色在线播放| 亚洲肉体裸体xxxx137| 蜜桃传媒一区二区亚洲av| 三级国产三级在线| 欧美在线一区二区视频| 欧美日韩国产黄| 一区中文字幕在线观看| 肉体视频在线| 美女喷水白浆| 欧美精品一区二区久久| 中文字幕中文字幕在线一区| 亚洲美女视频| 丝袜美腿亚洲综合| 欧美色图校园春色| 日韩av字幕| 91高清视频免费看| 中文字幕一区二区三区5566| 日韩亚洲国产中文字幕欧美| 青青操免费在线视频| 国产精品亚洲一区二区无码| 国产精品综合久久久久| 中文字幕久精品免费视频| 丰满人妻一区二区三区53号| 少妇精品久久久一区二区三区| 神马午夜在线观看| 一区二区三区四区五区| 情趣网站在线观看| 丁香激情五月婷婷| 97涩涩爰在线观看亚洲| 里番在线观看网站| 日韩专区中文字幕一区二区| 国产亚洲美州欧州综合国| 精品国产免费av| 图片婷婷一区| 九九热中文字幕| 美女黄毛**国产精品啪啪| 欧美日韩激情一区| 国产精品高潮粉嫩av| 中日韩免费视频中文字幕| 午夜小视频在线观看| 日本免费黄视频| 国产夫妻在线视频| 美女做暖暖视频免费在线观看全部网址91| 久久精品国产亚洲777| 一路向西2在线观看| 精品国产乱码久久久久久天美| 国产乱国产乱老熟300部视频| 日本一区二区免费电影| 老熟妇精品一区二区三区| 884aa四虎免费影库4h| 欧美色图在线观看| 欧美激情综合色综合啪啪五月| 66m—66摸成人免费视频| 九九久久久2| 一本大道香蕉久久| 在线国产日本| av鲁丝一区鲁丝二区鲁丝三区| 欧美大片91| 色综合久久综合网97色综合| 国产成人久久精品77777最新版本| 亚洲三级网页| 久久综合伊人77777麻豆最新章节| 国产精品剧情在线亚洲| 国内老熟妇对白hdxxxx| 成全在线观看免费完整动漫| 午夜亚洲性色视频| aaa免费看大片| 久久综合偷偷噜噜噜色| 日本中文字幕影院| 国产又粗又猛又爽又黄| 裸体武打性艳史| 亚洲va欧美va国产va天堂影院| 日韩午夜中文字幕| 国产一区二区精品丝袜| 国产一区二区三区在线观看免费| 中文字幕欧美日韩在线不卡| 黄毛片在线观看| 3344国产永久在线观看视频| 国产精品111| 91久久久一线二线三线品牌| 国产噜噜噜噜久久久久久久久| 成人影院中文字幕| 国产欧美日韩免费看aⅴ视频| 国产精品探花在线| 国产精品高清一区二区三区| 日韩一区视频在线| 9.1片黄在线观看| av日韩一区二区三区| 99精品欧美一区二区三区| 一区二区三区精品| 床上的激情91.| 国产xxxxx视频| 超碰在线97国产| 日本成人激情视频| 日本亚洲欧美美色| 97超碰国产一区二区三区| 亚洲一区二区不卡视频| 麻豆freexxxx性91精品| 亚洲一级免费视频| 精品三级久久久久久久电影聊斋| 日韩免费性生活视频播放| 免费一区二区三区在线视频| 粉嫩小泬无遮挡久久久久久| 欧美激情视频在线观看| 国产一区二区| 欧美福利第一页| 99在线观看免费视频精品观看| 波多野结衣一本一道| 丝袜免费视频| 久久午夜剧场| 亚洲第一狼人社区| 亚洲a∨日韩av高清在线观看| 永久免费网站视频在线观看| 亚洲欧洲日韩国产| 一区二区亚洲欧洲国产日韩| 在线电影中文日韩| 亚洲一区导航| 精品人体无码一区二区三区| 日韩一区二区三区免费观看| 亚洲无吗一区二区三区| 欧美男女爱爱视频| 国产成人美女视频| 秋霞在线一区| 亚洲精蜜桃久在线| 一色屋色费精品视频在线观看| 国产精品视频久| 成人影欧美片| 久久久成人精品视频| 日本大片在线看黄a∨免费| 色av综合在线| 精品国产一区二区三区av片| 亚洲伦在线观看| 日本黄色免费网站| 国产精品99久久久精品无码| 手机免费av片| jazzjazz国产精品久久| 久色视频网站| 久久久成人影院| 欧美高清一级片在线| 日韩精品欧美大片| 国产精品久久久久久久久免费桃花| 国产欧美一区二区精品久导航| 九九热视频免费观看| 91高清在线观看视频| 最新黄色网址在线观看| 国产精品免费一区二区三区在线观看| 欧美巨大xxxx做受沙滩| 国产福利在线导航| 亚洲国产天堂av| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线观看制服搞黄视频| 一级毛片免费高清中文字幕久久网| 欧美xxxx18性欧美| 五月激情丁香一区二区三区| 精品123区| 国产一区二区色| 综合在线视频| www.国产com| 精品视频第一区| 7777精品伊人久久久大香线蕉经典版下载| 欧洲精品在线一区| 黄色资源在线观看| 亚洲国产精久久久久久| 免费黄色a网站| 国产福利在线播放| 狠狠躁日日躁夜夜躁av| 国产一区二区三区成人欧美日韩在线观看| 在线观看欧美日韩| 18成人在线| 91精品国产品国语在线不卡| 亚洲激情播播| 日日夜夜综合网|