C語言預(yù)處理命令

    預(yù)處理(或稱預(yù)編譯)是指在進(jìn)行編譯的第一遍掃描(詞法掃描和語法分析)之前所作的工作。預(yù)處理指令指示在程序正式編譯前就由編譯器進(jìn)行的操作,可放在程序中任何位置。


    預(yù)處理是C語言的一個(gè)重要功能,它由預(yù)處理程序負(fù)責(zé)完成。當(dāng)對(duì)一個(gè)源文件進(jìn)行編譯時(shí),系統(tǒng)將自動(dòng)引用預(yù)處理程序?qū)υ闯绦蛑械念A(yù)處理部分作處理,處理完畢自動(dòng)進(jìn)入對(duì)源程序的編譯。


    C語言提供多種預(yù)處理功能,主要處理#開始的預(yù)編譯指令,如宏定義(#define)、文件包含(#include)、條件編譯(#ifdef)等。合理使用預(yù)處理功能編寫的程序便于閱讀、修改、移植和調(diào)試,也有利于模塊化程序設(shè)計(jì)。


    二  宏定義


    C語言源程序中允許用一個(gè)標(biāo)識(shí)符來表示一個(gè)字符串,稱為“宏”。被定義為宏的標(biāo)識(shí)符稱為“宏名”。在編譯預(yù)處理時(shí),對(duì)程序中所有出現(xiàn)的宏名,都用宏定義中的字符串去代換,這稱為宏替換或宏展開。


    宏定義是由源程序中的宏定義命令完成的。宏替換是由預(yù)處理程序自動(dòng)完成的。


    在C語言中,宏定義分為有參數(shù)和無參數(shù)兩種。下面分別討論這兩種宏的定義和調(diào)用。


    2.1 無參宏定義


    無參宏的宏名后不帶參數(shù)。其定義的一般形式為:


    #define  標(biāo)識(shí)符  字符串


    其中,“#”表示這是一條預(yù)處理命令(以#開頭的均為預(yù)處理命令)?!癲efine”為宏定義命令?!皹?biāo)識(shí)符”為符號(hào)常量,即宏名?!白址笨梢允浅?shù)、表達(dá)式、格式串等。


    宏定義用宏名來表示一個(gè)字符串,在宏展開時(shí)又以該字符串取代宏名。這只是一種簡(jiǎn)單的文本替換,預(yù)處理程序?qū)λ蛔魅魏螜z查。如有錯(cuò)誤,只能在編譯已被宏展開后的源程序時(shí)發(fā)現(xiàn)。


    注意理解宏替換中“換”的概念,即在對(duì)相關(guān)命令或語句的含義和功能作具體分析之前就要進(jìn)行文本替換。


    【例1】定義常量:


    #define MAX_TIME 1000


    若在程序里面寫if(time < MAX_TIME){.........},則編譯器在處理該代碼前會(huì)將MAX_TIME替換為1000。


    注意,這種情況下使用const定義常量可能更好,如const int MAX_TIME = 1000;。因?yàn)閏onst常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對(duì)前者進(jìn)行類型安全檢查,而對(duì)后者只進(jìn)行簡(jiǎn)單的字符文本替換,沒有類型安全檢查,并且在字符替換時(shí)可能會(huì)產(chǎn)生意料不到的錯(cuò)誤。


    【例2】反例:


    #define pint (int*)

    pint pa, pb;

         

    本意是定義pa和pb均為int型指針,但實(shí)際上變成int* pa,pb;。pa是int型指針,而pb是int型變量。本例中可用typedef來代替define,這樣pa和pb就都是int型指針了。


    因?yàn)楹甓x只是簡(jiǎn)單的字符串代換,在預(yù)處理階段完成,而typedef是在編譯時(shí)處理的,它不是作簡(jiǎn)單的代換,而是對(duì)類型說明符重新命名,被命名的標(biāo)識(shí)符具有類型定義說明的功能。


    typedef的具體說明見附錄6.4。


    無參宏注意事項(xiàng):


    宏名一般用大寫字母表示,以便于與變量區(qū)別。宏定義末尾不必加分號(hào),否則連分號(hào)一并替換。宏定義可以嵌套。


    可用#undef命令終止宏定義的作用域。


    使用宏可提高程序通用性和易讀性,減少不一致性,減少輸入錯(cuò)誤和便于修改。如數(shù)組大小常用宏定義。預(yù)處理是在編譯之前的處理,而編譯工作的任務(wù)之一就是語法檢查,預(yù)處理不做語法檢查。宏定義寫在函數(shù)的花括號(hào)外邊,作用域?yàn)槠浜蟮某绦?,通常在文件的最開頭。字符串" "中永遠(yuǎn)不包含宏,否則該宏名當(dāng)字符串處理。

    宏定義不分配內(nèi)存,變量定義分配內(nèi)存。


    2.2 帶參宏定義


    C語言允許宏帶有參數(shù)。在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。


    對(duì)帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實(shí)參去代換形參。


    帶參宏定義的一般形式為:

    #define  宏名(形參表)  字符串


    在字符串中含有各個(gè)形參。


    帶參宏調(diào)用的一般形式為:

    宏名(實(shí)參表);


    在宏定義中的形參是標(biāo)識(shí)符,而宏調(diào)用中的實(shí)參可以是表達(dá)式。


    在帶參宏定義中,形參不分配內(nèi)存單元,因此不必作類型定義。而宏調(diào)用中的實(shí)參有具體的值,要用它們?nèi)ゴ鷵Q形參,因此必須作類型說明,這點(diǎn)與函數(shù)不同。函數(shù)中形參和實(shí)參是兩個(gè)不同的量,各有自己的作用域,調(diào)用時(shí)要把實(shí)參值賦予形參,進(jìn)行“值傳遞”。而在帶參宏中只是符號(hào)代換,不存在值傳遞問題。


    【例3】


     #define INC(x) x+1  //宏定義

     y = INC(5);         //宏調(diào)用


    在宏調(diào)用時(shí),用實(shí)參5去代替形參x,經(jīng)預(yù)處理宏展開后的語句為y=5+1。


    【例4】反例:


    #define SQ(r)    r*r

         

    上述這種實(shí)參為表達(dá)式的宏定義,在一般使用時(shí)沒有問題;但遇到如area=SQ(a+b);時(shí)就會(huì)出現(xiàn)問題,宏展開后變?yōu)閍rea=a+b*a+b;,顯然違背本意。


    相比之下,函數(shù)調(diào)用時(shí)會(huì)先把實(shí)參表達(dá)式的值(a+b)求出來再賦予形參r;而宏替換對(duì)實(shí)參表達(dá)式不作計(jì)算直接地照原樣代換。因此在宏定義中,字符串內(nèi)的形參通常要用括號(hào)括起來以避免出錯(cuò)。


    進(jìn)一步地,考慮到運(yùn)算符優(yōu)先級(jí)和結(jié)合性,遇到area=10/SQ(a+b);時(shí)即使形參加括號(hào)仍會(huì)出錯(cuò)。因此,還應(yīng)在宏定義中的整個(gè)字符串外加括號(hào),


    綜上,正確的宏定義是#define SQ(r) ((r)*(r)),即宏定義時(shí)建議所有的層次都要加括號(hào)。


    【例5】帶參函數(shù)和帶參宏的區(qū)別:


     #define SQUARE(x) ((x)*(x))


     int Square(int x){


       return (x * x); //未考慮溢出保護(hù)


    }


    int main(void){


        int i = 1;


       while(i <= 5)


           printf("i = %d, Square = %d\n", i, Square(i++));


       int j = 1;


       while(j <= 5)


          printf("j = %d, SQUARE = %d\n", j, SQUARE(j++));

      return 0;


     }


    執(zhí)行后輸出如下:


    i = 2, Square = 1


    i = 3, Square = 4


    i = 4, Square = 9


    i = 5, Square = 16


    i = 6, Square = 25


    j = 3, SQUARE = 1


    j = 5, SQUARE = 9


    j = 7, SQUARE = 25


    本例意在說明,把同一表達(dá)式用函數(shù)處理與用宏處理兩者的結(jié)果有可能是不同的。


    調(diào)用Square函數(shù)時(shí),把實(shí)參i值傳給形參x后自增1,再輸出函數(shù)值。因此循環(huán)5次,輸出1~5的平方值。調(diào)用SQUARE宏時(shí),SQUARE(j++)被代換為((j++)*(j++))。在第一次循環(huán)時(shí),表達(dá)式中j初值為1,兩者相乘的結(jié)果為1。相乘后j自增兩次變?yōu)?,因此表達(dá)式中第二次相乘時(shí)結(jié)果為3*3=9。同理,第三次相乘時(shí)結(jié)果為5*5=25,并在此次循環(huán)后j值變?yōu)?,不再滿足循環(huán)條件,停止循環(huán)。


    從以上分析可以看出函數(shù)調(diào)用和宏調(diào)用二者在形式上相似,在本質(zhì)上是完全不同的。


    帶參宏注意事項(xiàng):


    宏名和形參表的括號(hào)間不能有空格。

    宏替換只作替換,不做計(jì)算,不做表達(dá)式求解。

    函數(shù)調(diào)用在編譯后程序運(yùn)行時(shí)進(jìn)行,并且分配內(nèi)存。宏替換在編譯前進(jìn)行,不分配內(nèi)存。

    函數(shù)只有一個(gè)返回值,利用宏則可以設(shè)法得到多個(gè)值。

    宏展開使源程序變長(zhǎng),函數(shù)調(diào)用不會(huì)。

    宏展開不占用運(yùn)行時(shí)間,只占編譯時(shí)間,函數(shù)調(diào)用占運(yùn)行時(shí)間(分配內(nèi)存、保留現(xiàn)場(chǎng)、值傳遞、返回值)。

    為防止無限制遞歸展開,當(dāng)宏調(diào)用自身時(shí),不再繼續(xù)展開。

    如:#define TEST(x)  (x + TEST(x))被展開為1 + TEST(1)。


    2.3 實(shí)踐用例


    包括基本用法(及技巧)和特殊用法(#和##等)。


    #define可以定義多條語句,以替代多行的代碼,但應(yīng)注意替換后的形式,避免出錯(cuò)。宏定義在換行時(shí)要加上一個(gè)反斜杠”\”,而且反斜杠后面直接回車,不能有空格。


    2.3.1 基本用法

    1. 定義常量:


    #define PI   3.1415926

    將程序中出現(xiàn)的PI全部換成3.1415926。


    2. 定義表達(dá)式:

     #define M   (y*y+3*y)


    編碼時(shí)所有的表達(dá)式(y*y+3*y)都可由M代替,而編譯時(shí)先由預(yù)處理程序進(jìn)行宏替換,即用(y*y+3*y)表達(dá)式去置換所有的宏名M,然后再進(jìn)行編譯。


    注意,在宏定義中表達(dá)式(y*y+3*y)兩邊的括號(hào)不能少,否則可能會(huì)發(fā)生錯(cuò)誤。如s=3*M+4*M在預(yù)處理時(shí)經(jīng)宏展開變?yōu)閟=3*(y*y+3*y)+4*(y*y+3*y),如果宏定義時(shí)不加括號(hào)就展開為s=3*y*y+3*y+4*y*y+3*y,顯然不符合原意。因此在作宏定義時(shí)必須十分注意。應(yīng)保證在宏替換之后不發(fā)生錯(cuò)誤。


    3. 得到指定地址上的一個(gè)字節(jié)或字:


    #define MEM_B(x)     (*((char *)(x)))

     #define MEM_W(x)     (*((short *)(x)))


    4. 求最大值和最小值:


    #define MAX(x, y)     (((x) > (y)) ? (x) : (y))

    #define MIN(x, y)     (((x) < (y)) ? (x) : (y))


    以后使用MAX (x,y)或MIN (x,y),就可分別得到x和y中較大或較小的數(shù)。


    但這種方法存在弊病,例如執(zhí)行MAX(x++, y)時(shí),x++被執(zhí)行多少次取決于x和y的大小;當(dāng)宏參數(shù)為函數(shù)也會(huì)存在類似的風(fēng)險(xiǎn)。所以建議用內(nèi)聯(lián)函數(shù)而不是這種方法提高速度。不過,雖然存在這樣的弊病,但宏定義非常靈活,因?yàn)閤和y可以是各種數(shù)據(jù)類型。


    以下給出MAX宏的兩個(gè)安全版本(源自linux/kernel.h):


     #define MAX_S(x, y) ({ \


        const typeof(x) _x = (x);  \


        const typeof(y) _y = (y);  \


        (void)(&_x == &_y);       \


         _x > _y ? _x : _y; })



     #define TMAX_S(type, x, y) ({ \


         type _x = (x);  \


         type _y = (y);  \


        _x > _y ? _x: _y; })


    Gcc編譯器將包含在圓括號(hào)和大括號(hào)雙層括號(hào)內(nèi)的復(fù)合語句看作是一個(gè)表達(dá)式,它可出現(xiàn)在任何允許表達(dá)式的地方;復(fù)合語句中可聲明局部變量,判斷循環(huán)條件等復(fù)雜處理。而表達(dá)式的最后一條語句必須是一個(gè)表達(dá)式,它的計(jì)算結(jié)果作為返回值。MAX_S和TMAX_S宏內(nèi)就定義局部變量以消除參數(shù)副作用。


    MAX_S宏內(nèi)(void)(&_x == &_y)語句用于檢查參數(shù)類型一致性。當(dāng)參數(shù)x和y類型不同時(shí),會(huì)產(chǎn)生” comparison of distinct pointer types lacks a cast”的編譯警告。


    注意,MAX_S和TMAX_S宏雖可避免參數(shù)副作用,但會(huì)增加內(nèi)存開銷并降低執(zhí)行效率。若使用者能保證宏參數(shù)不存在副作用,則可選用普通定義(即MAX宏)。 


    5. 得到一個(gè)成員在結(jié)構(gòu)體中的偏移量(lint 545告警表示"&用法值得懷疑",此處抑制該警告):


     #define FPOS(type, field) \

     /*lint -e545 */ ((int)&((type *)0)-> field) /*lint +e545 */


    6. 得到一個(gè)結(jié)構(gòu)體中某成員所占用的字節(jié)數(shù):


    #define FSIZ(type, field)    sizeof(((type *)0)->field)


    7. 按照LSB格式把兩個(gè)字節(jié)轉(zhuǎn)化為一個(gè)字(word):


    #define FLIPW(arr)          ((((short)(arr)[0]) * 256) + (arr)[1])


    8. 按照LSB格式把一個(gè)字(word)轉(zhuǎn)化為兩個(gè)字節(jié):


    #define FLOPW(arr, val) \

        (arr)[0] = ((val) / 256); \

        (arr)[1] = ((val) & 0xFF)


    9. 得到一個(gè)變量的地址:


    #define B_PTR(var)       ((char *)(void *)&(var))

    #define W_PTR(var)       ((short *)(void *)&(var))


    10. 得到一個(gè)字(word)的高位和低位字節(jié):


    #define WORD_LO(x)       ((char)((short)(x)&0xFF))

    #define WORD_HI(x)       ((char)((short)(x)>>0x8))


    11. 返回一個(gè)比X大的最接近的8的倍數(shù):


    #define RND8(x)           ((((x) + 7) / 8) * 8)


    12. 將一個(gè)字母轉(zhuǎn)換為大寫或小寫:


    #define UPCASE(c)         (((c) >= 'a' && (c) <= 'z') ? ((c) + 'A' - 'a') : (c))

    #define LOCASE(c)         (((c) >= 'A' && (c) <= 'Z') ? ((c) + 'a' - 'A') : (c))


    注意,UPCASE和LOCASE宏僅適用于ASCII編碼(依賴于碼字順序和連續(xù)性),而不適用于EBCDIC編碼。


    13. 判斷字符是不是10進(jìn)值的數(shù)字:


     #define ISDEC(c)          ((c) >= '0' && (c) <= '9')


    14. 判斷字符是不是16進(jìn)值的數(shù)字:


      #define ISHEX(c)          (((c) >= '0' && (c) <= '9') ||\


         ((c) >= 'A' && (c) <= 'F') ||\


         ((c) >= 'a' && (c) <= 'f'))



    15. 防止溢出的一個(gè)方法:


     #define INC_SAT(val)      (val = ((val)+1 > (val)) ? (val)+1 : (val))

    16. 返回?cái)?shù)組元素的個(gè)數(shù):


    #define ARR_SIZE(arr)     (sizeof((arr)) / sizeof((arr[0])))


    17. 對(duì)于IO空間映射在存儲(chǔ)空間的結(jié)構(gòu),輸入輸出處理:


     #define INP(port)           (*((volatile char *)(port)))


     #define INPW(port)          (*((volatile short *)(port)))


     #define INPDW(port)         (*((volatile int *)(port)))


     #define OUTP(port, val)     (*((volatile char *)(port)) = ((char)(val)))


     #define OUTPW(port, val)    (*((volatile short *)(port)) = ((short)(val)))


     #define OUTPDW(port, val)   (*((volatile int *)(port)) = ((int)(val)))


    18. 使用一些宏跟蹤調(diào)試:


    ANSI標(biāo)準(zhǔn)說明了五個(gè)預(yù)定義的宏名(注意雙下劃線),即:__LINE__、__FILE __、__DATE__、__TIME__、__STDC __。


    若編譯器未遵循ANSI標(biāo)準(zhǔn),則可能僅支持以上宏名中的幾個(gè),或根本不支持。此外,編譯程序可能還提供其它預(yù)定義的宏名(如__FUCTION__)。


    __DATE__宏指令含有形式為月/日/年的串,表示源文件被翻譯到代碼時(shí)的日期;源代碼翻譯到目標(biāo)代碼的時(shí)間作為串包含在__TIME__中。串形式為時(shí):分:秒。


    如果實(shí)現(xiàn)是標(biāo)準(zhǔn)的,則宏__STDC__含有十進(jìn)制常量1。如果它含有任何其它數(shù),則實(shí)現(xiàn)是非標(biāo)準(zhǔn)的。


    可以借助上面的宏來定義調(diào)試宏,輸出數(shù)據(jù)信息和所在文件所在行。如下所示:


     #define MSG(msg, date)      printf(msg);printf(“[%d][%d][%s]”,date,__LINE__,__FILE__)

         

    19. 用do{…}while(0)語句包含多語句防止錯(cuò)誤:


    #define DO(a, b) do{\

        a+b;\

        a++;\

     }while(0)


    20. 實(shí)現(xiàn)類似“重載”功能


    C語言中沒有swap函數(shù),而且不支持重載,也沒有模板概念,所以對(duì)于每種數(shù)據(jù)類型都要寫出相應(yīng)的swap函數(shù),如:


    IntSwap(int *,  int *);  


    LongSwap(long *,  long *);  


    StringSwap(char *,  char *); 


    可采用宏定義TSWAP (t,x,y)或SWAP(x, y)交換兩個(gè)整型或浮點(diǎn)參數(shù):


     

    #define TSWAP(type, x, y) do{ \


          type _y = y; \


          y = x;       \


          x = _y;      \


      }while(0)


      #define SWAP(x, y) do{ \


          x = x + y;   \


          y = x - y;   \


          x = x - y;   \


     }while(0)



     int main(void){


         int a = 10, b = 5;


         TSWAP(int, a, b);


         printf(“a=%d, b=%d\n”, a, b);


         return 0;


    }


    21. 1年中有多少秒(忽略閏年問題) :


     #define SECONDS_PER_YEAR    (60UL * 60 * 24 * 365)


    該表達(dá)式將使一個(gè)16位機(jī)的整型數(shù)溢出,因此用長(zhǎng)整型符號(hào)L告訴編譯器該常數(shù)為長(zhǎng)整型數(shù)。


    注意,不可定義為#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL,否則將產(chǎn)生(31536000)UL而非31536000UL,這會(huì)導(dǎo)致編譯報(bào)錯(cuò)。


    以下幾種寫法也正確:


     #define SECONDS_PER_YEAR    60 * 60 * 24 * 365UL


     #define SECONDS_PER_YEAR    (60UL * 60UL * 24UL * 365UL)


     #define SECONDS_PER_YEAR    ((unsigned long)(60 * 60 * 24 * 365))

    }


    22. 取消宏定義:


    #define [MacroName] [MacroValue]       //定義宏


    #undef [MacroName]                     //取消宏



    宏定義必須寫在函數(shù)外,其作用域?yàn)楹甓x起到源程序結(jié)束。如要終止其作用域可使用#undef命令:


     #define PI   3.14159


     int main(void){

         //……

     }


     #undef PI

     int func(void){

         //……

     }


    表示PI只在main函數(shù)中有效,在func1中無效。


    2.3.2 特殊用法


    主要涉及C語言宏里#和##的用法,以及可變參數(shù)宏。


    2.3.2.1 字符串化操作符#


    在C語言的宏中,#的功能是將其后面的宏參數(shù)進(jìn)行字符串化操作(Stringfication),簡(jiǎn)單說就是將宏定義中的傳入?yún)?shù)名轉(zhuǎn)換成用一對(duì)雙引號(hào)括起來參數(shù)名字符串。#只能用于有傳入?yún)?shù)的宏定義中,且必須置于宏定義體中的參數(shù)名前。例如:


     #define EXAMPLE(instr)      printf("The input string is:\t%s\n", #instr)

     #define EXAMPLE1(instr)     #instr


    當(dāng)使用該宏定義時(shí),example(abc)在編譯時(shí)將會(huì)展開成printf("the input string is:\t%s\n","abc");string str=example1(abc)將會(huì)展成string str="abc"。


     又如下面代碼中的宏:


      define WARN_IF(exp) do{ \


         if(exp) \


             fprintf(stderr, "Warning: " #exp"\n"); \


     } while(0)


    則代碼WARN_IF (divider == 0)會(huì)被替換為:


    do{

         if(divider == 0)

         

           fprintf(stderr, "Warning" "divider == 0" "\n");

     } while(0)


    這樣,每次divider(除數(shù))為0時(shí)便會(huì)在標(biāo)準(zhǔn)錯(cuò)誤流上輸出一個(gè)提示信息。


    注意#宏對(duì)空格的處理:


    忽略傳入?yún)?shù)名前面和后面的空格。如str= example1(   abc )會(huì)被擴(kuò)展成 str="abc"。

    當(dāng)傳入?yún)?shù)名間存在空格時(shí),編譯器會(huì)自動(dòng)連接各個(gè)子字符串,每個(gè)子字符串間只以一個(gè)空格連接。如str= example1( abc    def)會(huì)被擴(kuò)展成 str="abc def"。


    2.3.2.2 符號(hào)連接操作符##


     ##稱為連接符(concatenator或token-pasting),用來將兩個(gè)Token連接為一個(gè)Token。注意這里連接的對(duì)象是Token就行,而不一定是宏的變量。例如:

     #define PASTER(n)     printf( "token" #n " = %d", token##n)


     int token9 = 9;


    則運(yùn)行PASTER(9)后輸出結(jié)果為token9 = 9。


    又如要做一個(gè)菜單項(xiàng)命令名和函數(shù)指針組成的結(jié)構(gòu)體數(shù)組,并希望在函數(shù)名和菜單項(xiàng)命令名之間有直觀的、名字上的關(guān)系。那么下面的代碼就非常實(shí)用:


    struct command{


         char * name;


         void (*function)(void);


     };


    #define COMMAND(NAME)   {NAME, NAME##_command}


    然后,就可用一些預(yù)先定義好的命令來方便地初始化一個(gè)command結(jié)構(gòu)的數(shù)組:


     struct command commands[] = {


         COMMAND(quit),


         COMMAND(help),


         //...


     }


    COMMAND宏在此充當(dāng)一個(gè)代碼生成器的作用,這樣可在一定程度上減少代碼密度,間接地也可減少不留心所造成的錯(cuò)誤。


    還可以用n個(gè)##符號(hào)連接n+1個(gè)Token,這個(gè)特性是#符號(hào)所不具備的。如:


     #define  LINK_MULTIPLE(a, b, c, d)      a##_##b##_##c##_##d


     typedef struct record_type LINK_MULTIPLE(name, company, position, salary);


    這里這個(gè)語句將展開為typedef struct record_type name_company_position_salary。


    注意:


    當(dāng)用##連接形參時(shí),##前后的空格可有可無。

    連接后的實(shí)際參數(shù)名,必須為實(shí)際存在的參數(shù)名或是編譯器已知的宏定義。

    凡是宏定義里有用'#'或'##'的地方,宏參數(shù)是不會(huì)再展開。如:


     #define STR(s)       #s


     #define CONS(a,b)    int(a##e##b)


    則printf("int max: %s\n", STR(INT_MAX))會(huì)被展開為printf("int max: %s\n", "INT_MAX")。其中,變量INT_MAX為int型的最大值,其值定義在<climits.h>中。printf("%s\n", CONS(A, A))會(huì)被展開為printf("%s\n", int(AeA)),從而編譯報(bào)錯(cuò)。


    INT_MAX和A都不會(huì)再被展開,多加一層中間轉(zhuǎn)換宏即可解決這個(gè)問題。加這層宏是為了把所有宏的參數(shù)在這層里全部展開,那么在轉(zhuǎn)換宏里的那一個(gè)宏(如_STR)就能得到正確的宏參數(shù)。


    #define _STR(s)         #s 


    #define STR(s)          _STR(s)       // 轉(zhuǎn)換宏


    #define _CONS(a,b)      int(a##e##b)


    #define CONS(a,b)       _CONS(a,b)    // 轉(zhuǎn)換宏


    則printf("int max: %s\n", STR(INT_MAX))輸出為int max: 0x7fffffff;而printf("%d\n", CONS(A, A))輸出為200。


    這種分層展開的技術(shù)稱為宏的Argument Prescan,參見附錄6.1。




    2.3.2.3 字符化操作符@#


    @#稱為字符化操作符(charizing),只能用于有傳入?yún)?shù)的宏定義中,且必須置于宏定義體的參數(shù)名前。作用是將傳入的單字符參數(shù)名轉(zhuǎn)換成字符,以一對(duì)單引號(hào)括起來。


     #define makechar(x)    #@x

     a = makechar(b);


    展開后變成a= 'b'。 


    2.3.2.4 可變參數(shù)宏


    在C語言宏中稱為Variadic Macro,即變參宏。C99編譯器標(biāo)準(zhǔn)允許定義可變參數(shù)宏(Macros with a Variable Number of Arguments),這樣就可以使用擁有可變參數(shù)表的宏。


    可變參數(shù)宏的一般形式為:


    #define  DBGMSG(format, ...)  fprintf (stderr, format, __VA_ARGS__)


    省略號(hào)代表一個(gè)可以變化的參數(shù)表,變參必須作為參數(shù)表的最右一項(xiàng)出現(xiàn)。使用保留名__VA_ARGS__ 把參數(shù)傳遞給宏。在調(diào)用宏時(shí),省略號(hào)被表示成零個(gè)或多個(gè)符號(hào)(包括里面的逗號(hào)),一直到到右括號(hào)結(jié)束為止。當(dāng)被調(diào)用時(shí),在宏體(macro body)中,那些符號(hào)序列集合將代替里面的__VA_ARGS__標(biāo)識(shí)符。當(dāng)宏的調(diào)用展開時(shí),實(shí)際的參數(shù)就傳遞給fprintf ()。


    注意:可變參數(shù)宏不被ANSI/ISO C++所正式支持。因此,應(yīng)當(dāng)檢查編譯器是否支持這項(xiàng)技術(shù)。 


    在標(biāo)準(zhǔn)C里,不能省略可變參數(shù),但卻可以給它傳遞一個(gè)空的參數(shù),這會(huì)導(dǎo)致編譯出錯(cuò)。因?yàn)楹暾归_后,里面的字符串后面會(huì)有個(gè)多余的逗號(hào)。為解決這個(gè)問題,GNU CPP中做了如下擴(kuò)展定義:


    #define  DBGMSG(format, ...)  fprintf (stderr, format, ##__VA_ARGS__)


    若可變參數(shù)被忽略或?yàn)榭眨?#操作將使編譯器刪除它前面多余的逗號(hào)(否則會(huì)編譯出錯(cuò))。若宏調(diào)用時(shí)提供了可變參數(shù),編譯器會(huì)把這些可變參數(shù)放到逗號(hào)的后面。


    同時(shí),GCC還支持顯式地命名變參為args,如同其它參數(shù)一樣。如下格式的宏擴(kuò)展:


    #define  DBGMSG(format, args...)  fprintf (stderr, format, ##args)


    這樣寫可讀性更強(qiáng),并且更容易進(jìn)行描述。


    用GCC和C99的可變參數(shù)宏, 可以更方便地打印調(diào)試信息,如:


     #ifdef DEBUG


         #define DBGPRINT(format, args...) \


             fprintf(stderr, format, ##args)


     #else


         #define DBGPRINT(format, args...)


     #endif


    這樣定義之后,代碼中就可以用dbgprint了,例如dbgprint ("aaa [%s]", __FILE__)。


    結(jié)合第4節(jié)的“條件編譯”功能,可以構(gòu)造出如下調(diào)試打印宏:

     

     #ifdef LOG_TEST_DEBUG


          /* OMCI調(diào)試日志宏 */


        //以10進(jìn)制格式日志整型變量


          #define PRINT_DEC(x)          printf(#x" = %d\n", x)


          #define PRINT_DEC2(x,y)       printf(#x" = %d\n", y)


         //以16進(jìn)制格式日志整型變量


          #define PRINT_HEX(x)          printf(#x" = 0x%-X\n", x)


          #define PRINT_HEX2(x,y)       printf(#x" = 0x%-X\n", y)


          //以字符串格式日志字符串變量


         #define PRINT_STR(x)          printf(#x" = %s\n", x)


         #define PRINT_STR2(x,y)       printf(#x" = %s\n", y)



         //日志提示信息


         #define PROMPT(info)          printf("%s\n", info)


         //調(diào)試定位信息打印宏


         #define  TP                   printf("%-4u - [%s<%s>]\n", __LINE__, __FILE__, __FUNCTION__);


         //調(diào)試跟蹤宏,在待日志信息前附加日志文件名、行數(shù)、函數(shù)名等信息


         #define TRACE(fmt, args...)\


         do{\


            printf("[%s(%d)<%s>]", __FILE__, __LINE__, __FUNCTION__);\


            printf((fmt), ##args);\


         }while(0)


     #else


         #define PRINT_DEC(x)


         #define PRINT_DEC2(x,y)


         #define PRINT_HEX(x)


         #define PRINT_HEX2(x,y)


         #define PRINT_STR(x)


         #define PRINT_STR2(x,y)


         #define PROMPT(info)


         #define  TP


         #define TRACE(fmt, args...)


     #endif

     


    三  文件包含


    文件包含命令行的一般形式為:


    #include "文件名"


    通常,該文件是后綴名為"h"或"hpp"的頭文件。文件包含命令把指定頭文件插入該命令行位置取代該命令行,從而把指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件。


    在程序設(shè)計(jì)中,文件包含是很有用的。一個(gè)大程序可以分為多個(gè)模塊,由多個(gè)程序員分別編程。有些公用的符號(hào)常量或宏定義等可單獨(dú)組成一個(gè)文件,在其它文件的開頭用包含命令包含該文件即可使用。這樣,可避免在每個(gè)文件開頭都去書寫那些公用量,從而節(jié)省時(shí)間,并減少出錯(cuò)。


    對(duì)文件包含命令要說明以下幾點(diǎn):


    包含命令中的文件名可用雙引號(hào)括起來,也可用尖括號(hào)括起來,如#include "common.h"和#include<math.h>。但這兩種形式是有區(qū)別的:使用尖括號(hào)表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時(shí)設(shè)置的include目錄),而不在當(dāng)前源文件目錄去查找;


    使用雙引號(hào)則表示首先在當(dāng)前源文件目錄中查找,若未找到才到包含目錄中去查找。用戶編程時(shí)可根據(jù)自己文件所在的目錄來選擇某一種命令形式。


    一個(gè)include命令只能指定一個(gè)被包含文件,若有多個(gè)文件要包含,則需用多個(gè)include命令。文件包含允許嵌套,即在一個(gè)被包含的文件中又可以包含另一個(gè)文件。

     


    四  條件編譯


    一般情況下,源程序中所有的行都參加編譯。但有時(shí)希望對(duì)其中一部分內(nèi)容只在滿足一定條件才進(jìn)行編譯,也就是對(duì)一部分內(nèi)容指定編譯的條件,這就是“條件編譯”。有時(shí),希望當(dāng)滿足某條件時(shí)對(duì)一組語句進(jìn)行編譯,而當(dāng)條件不滿足時(shí)則編譯另一組語句。


    條件編譯功能可按不同的條件去編譯不同的程序部分,從而產(chǎn)生不同的目標(biāo)代碼文件。這對(duì)于程序的移植和調(diào)試是很有用的。


    條件編譯有三種形式,下面分別介紹。


    4.1 #ifdef形式


    #ifdef  標(biāo)識(shí)符  (或#if defined標(biāo)識(shí)符)


        程序段1


    #else


        程序段2


    #endif



    如果標(biāo)識(shí)符已被#define命令定義過,則對(duì)程序段1進(jìn)行編譯;否則對(duì)程序段2進(jìn)行編譯。如果沒有程序段2(它為空),#else可以沒有,即可以寫為:


    #ifdef  標(biāo)識(shí)符  (或#if defined標(biāo)識(shí)符)


        程序段


    #endif


    這里的“程序段”可以是語句組,也可以是命令行。這種條件編譯可以提高C源程序的通用性。


    【例6】


    #define NUM OK


     int main(void){


         struct stu{


              int num;


              char *name;


              char sex;


              float score;


         }*ps;


         ps=(struct stu*)malloc(sizeof(struct stu));


         ps->num = 102;


         ps->name = "Zhang ping";


         ps->sex = 'M';


         ps->score = 62.5;


     #ifdef NUM


         printf("Number=%d\nScore=%f\n", ps->num, ps->score); /*--Execute--*/


     #else


         printf("Name=%s\nSex=%c\n", ps->name, ps->sex);


     #endif


         free(ps);


         return 0;


     }

         

    由于在程序中插入了條件編譯預(yù)處理命令,因此要根據(jù)NUM是否被定義過來決定編譯哪個(gè)printf語句。而程序首行已對(duì)NUM作過宏定義,因此應(yīng)對(duì)第一個(gè)printf語句作編譯,故運(yùn)行結(jié)果是輸出了學(xué)號(hào)和成績(jī)。


    程序首行定義NUM為字符串“OK”,其實(shí)可為任何字符串,甚至不給出任何字符串,即#define NUM也具有同樣的意義。只有取消程序首行宏定義才會(huì)去編譯第二個(gè)printf語句。


    4.2 #ifndef 形式


    #ifndef  標(biāo)識(shí)符


        程序段1


    #else


        程序段2


    #endif



    如果標(biāo)識(shí)符未被#define命令定義過,則對(duì)程序段1進(jìn)行編譯,否則對(duì)程序段2進(jìn)行編譯。這與#ifdef形式的功能正相反。


    “#ifndef  標(biāo)識(shí)符”也可寫為“#if  !(defined 標(biāo)識(shí)符)”。


    4.3 #if形式


    #if 常量表達(dá)式


        程序段1


    #else


        程序段2


    #endif


    如果常量表達(dá)式的值為真(非0),則對(duì)程序段1 進(jìn)行編譯,否則對(duì)程序段2進(jìn)行編譯。因此可使程序在不同條件下,完成不同的功能。


    【例7】輸入一行字母字符,根據(jù)需要設(shè)置條件編譯,使之能將字母全改為大寫或小寫字母輸出。


    #define CAPITAL_LETTER   1


      int main(void){


          char szOrig[] = "C Language", cChar;


          int dwIdx = 0;


          while((cChar = szOrig[dwIdx++]) != '\0')


          {


      #if CAPITAL_LETTER


             if((cChar >= 'a') && (cChar <= 'z')) cChar = cChar - 0x20;


      #else


             if((cChar >= 'A') && (cChar <= 'Z')) cChar = cChar + 0x20;


     #endif


             printf("%c", cChar);


        }

         return 0;

     }


    在程序第一行定義宏CAPITAL_LETTER為1,因此在條件編譯時(shí)常量表達(dá)式CAPITAL_LETTER的值為真(非零),故運(yùn)行后使小寫字母變成大寫(C LANGUAGE)。


    本例的條件編譯當(dāng)然也可以用if條件語句來實(shí)現(xiàn)。但是用條件語句將會(huì)對(duì)整個(gè)源程序進(jìn)行編譯,生成的目標(biāo)代碼程序很長(zhǎng);而采用條件編譯,則根據(jù)條件只編譯其中的程序段1或程序段2,生成的目標(biāo)程序較短。如果條件編譯的程序段很長(zhǎng),采用條件編譯的方法是十分必要的。


    4.4 實(shí)踐用例


    1. 屏蔽跨平臺(tái)差異


    在大規(guī)模開發(fā)過程中,特別是跨平臺(tái)和系統(tǒng)的軟件里,可以在編譯時(shí)通過條件編譯設(shè)置編譯環(huán)境。


    例如,有一個(gè)數(shù)據(jù)類型,在Windows平臺(tái)中應(yīng)使用long類型表示,而在其他平臺(tái)應(yīng)使用float表示。這樣往往需要對(duì)源程序作必要的修改,這就降低了程序的通用性??梢杂靡韵碌臈l件編譯:


     #ifdef WINDOWS


         #define MYTYPE long


     #else


         #define MYTYPE float


     #endif


    如果在Windows上編譯程序,則可以在程序的開始加上#define WINDOWS,這樣就編譯命令行    #define MYTYPE long;


    如果在這組條件編譯命令前曾出現(xiàn)命令行#define WINDOWS 0,則預(yù)編譯后程序中的MYTYPE都用float代替。這樣,源程序可以不必作任何修改就可以用于不同類型的計(jì)算機(jī)系統(tǒng)。


    2. 包含程序功能模塊


    例如,在程序首部定義#ifdef FLV:


     #ifdef FLV


        include"fastleave.c"


     #endif


    如果不許向別的用戶提供該功能,則在編譯之前將首部的FLV加一下劃線即可。


    3. 開關(guān)調(diào)試信息


    調(diào)試程序時(shí),常常希望輸出一些所需的信息以便追蹤程序的運(yùn)行。而在調(diào)試完成后不再輸出這些信息。可以在源程序中插入以下的條件編譯段:


     #ifdef DEBUG


         printf("device_open(%p)\n", file);


     #endif


     如果在它的前面有以下命令行#define DEBUG,則在程序運(yùn)行時(shí)輸出file指針的值,以便調(diào)試分析。調(diào)試完成后只需將這個(gè)define命令行刪除即可,這時(shí)所有使用DEBUG作標(biāo)識(shí)符的條件編譯段中的printf語句不起作用,即起到“開關(guān)”一樣統(tǒng)一控制的作用。 


    4. 避開硬件的限制。


    有時(shí)一些具體應(yīng)用環(huán)境的硬件不同,但限于條件本地缺乏這種設(shè)備,可繞過硬件直接寫出預(yù)期結(jié)果:


    #ifndef TEST


         i = dial();  //程序調(diào)試運(yùn)行時(shí)繞過此語句


     #else


         i = 0;


     #endif


    調(diào)試通過后,再屏蔽TEST的定義并重新編譯即可。   


    5. 防止頭文件重復(fù)包含


    頭文件(.h)可以被頭文件或C文件包含。由于頭文件包含可以嵌套,C文件就有可能多次包含同一個(gè)頭文件;或者不同的C文件都包含同一個(gè)頭文件,編譯時(shí)就可能出現(xiàn)重復(fù)包含(重復(fù)定義)的問題。


    在頭文件中為了避免重復(fù)調(diào)用(如兩個(gè)頭文件互相包含對(duì)方),常采用這樣的結(jié)構(gòu):


     #ifndef  <標(biāo)識(shí)符>


         #define  <標(biāo)識(shí)符>


         //真正的內(nèi)容,如函數(shù)聲明之類


     #endif


    <標(biāo)識(shí)符>可以自由命名,但一般形如__HEADER_H,且每個(gè)頭文件標(biāo)識(shí)都應(yīng)該是唯一的。


    事實(shí)上,不管頭文件會(huì)不會(huì)被多個(gè)文件引用,都要加上條件編譯開關(guān)來避免重復(fù)包含。 


    6. 在#ifndef中定義變量出現(xiàn)的問題(一般不定義在#ifndef中)。


     

    #ifndef PRECMPL


         #define PRECMPL


        int var;

        

     #endif


    其中有個(gè)變量定義,在VC中鏈接時(shí)會(huì)出現(xiàn)變量var重復(fù)定義的錯(cuò)誤,而在C中成功編譯。


    (1) 當(dāng)?shù)谝粋€(gè)使用這個(gè)頭文件的.cpp文件生成.obj時(shí),var在里面定義;當(dāng)另一個(gè)使用該頭文件的.cpp文件再次(單獨(dú))生成.obj時(shí),var又被定義;然后兩個(gè)obj被第三個(gè)包含該頭文件.cpp連接在一起,會(huì)出現(xiàn)重復(fù)定義。


    (2) 把源程序文件擴(kuò)展名改成.c后,VC按照C語言語法對(duì)源程序進(jìn)行編譯。在C語言中,遇到多個(gè)int var則自動(dòng)認(rèn)為其中一個(gè)是定義,其他的是聲明。


    (3) C語言和C++語言連接結(jié)果不同,可能是在進(jìn)行編譯時(shí),C++語言將全局變量默認(rèn)為強(qiáng)符號(hào),所以連接出錯(cuò)。C語言則依照是否初始化進(jìn)行強(qiáng)弱的判斷的(僅供參考)。


    解決方法:


    (1) 把源程序文件擴(kuò)展名改成.c。


     (2) .h中只聲明 extern int var;,在.cpp中定義(推薦)


    //<x.h>


     #ifndef  __X_H


         #define  __X_H


         extern int var;


     #endif


     //<x.c>


     int var = 0;


    綜上,變量一般不要定義在.h文件中。



    五  小結(jié)


    預(yù)處理功能是C語言特有的功能,它是在對(duì)源程序正式編譯前由預(yù)處理程序完成的。程序員在程序中用預(yù)處理命令來調(diào)用這些功能。


    宏定義是用一個(gè)標(biāo)識(shí)符來表示一個(gè)字符串,這個(gè)字符串可以是常量、變量或表達(dá)式。在宏調(diào)用中將用該字符串代換宏名。


    宏定義可以帶有參數(shù),宏調(diào)用時(shí)是以實(shí)參代換形參。而不是“值傳遞”。

    為了避免宏替換時(shí)發(fā)生錯(cuò)誤,宏定義中的字符串應(yīng)加括號(hào),字符串中出現(xiàn)的形式參數(shù)兩邊也應(yīng)加括號(hào)。


    文件包含是預(yù)處理的一個(gè)重要功能,它可用來把多個(gè)源文件連接成一個(gè)源文件進(jìn)行編譯,結(jié)果將生成一個(gè)目標(biāo)文件。


    條件編譯允許只編譯源程序中滿足條件的程序段,使生成的目標(biāo)程序較短,從而減少了內(nèi)存的開銷并提高了程序的效率。


    使用預(yù)處理功能便于程序的修改、閱讀、移植和調(diào)試,也便于實(shí)現(xiàn)模塊化程序設(shè)計(jì)。

     


    六 附錄

    6.1 Argument Prescan

    (摘自http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html)


    Macro arguments are completely macro-expanded before they are substituted into a macro body, unless they are stringified or pasted with other tokens. After substitution, the entire macro body, including the substituted arguments, is scanned again for macros to be expanded. The result is that the arguments are scanned twice to expand macro calls in them.


    宏參數(shù)被完全展開后再替換入宏體,但當(dāng)宏參數(shù)被字符串化(#)或與其它子串連接(##)時(shí)不予展開。在替換之后,再次掃描整個(gè)宏體(包括已替換宏參數(shù))以進(jìn)一步展開宏。結(jié)果是宏參數(shù)被掃描兩次以展開參數(shù)所(嵌套)調(diào)用的宏。


    若帶參數(shù)宏定義中的參數(shù)稱為形參,調(diào)用宏時(shí)的實(shí)際參數(shù)稱為實(shí)參,則宏的展開可用以下三步來簡(jiǎn)單描述(該步驟與gcc摘錄稍有不同,但更易操作):


    1) 用實(shí)參替換形參,將實(shí)參代入宏文本中;


    2) 若實(shí)參也是宏,則展開實(shí)參;


    3) 繼續(xù)處理宏替換后的宏文本,若宏文本也包含宏則繼續(xù)展開,否則完成展開。


    其中第一步將實(shí)參代入宏文本后,若實(shí)參前遇到字符“#”或“##”,即使實(shí)參是宏也不再展開實(shí)參,而當(dāng)作文本處理。


    上述展開步驟示例如下:


    #define TO_STRING(x)    _TO_STRING(x)


    #define _TO_STRING(x)   #x


    #define FOO             4


    則_TO_STRING(FOO)展開為”FOO”;TO_STRING(FOO)展開為_TO_STRING(4),進(jìn)而展開為”4”。相當(dāng)于借助_TO_STRING這樣的中間宏,先展開宏參數(shù),延遲其字符化。


    6.2 宏的其他注意事項(xiàng)


    1. 避免在無作用域限定(未用{}括起)的宏內(nèi)定義數(shù)組、結(jié)構(gòu)、字符串等變量,否則函數(shù)中對(duì)宏的多次引用會(huì)導(dǎo)致實(shí)際局部變量空間成倍放大。


     2. 按照宏的功能、模塊進(jìn)行集中定義。即在一處將常量數(shù)值定義為宏,其他地方通過引用該宏,生成自己模塊的宏。嚴(yán)禁相同含義的常量數(shù)值,在不同地方定義為不同的宏,即使數(shù)值相同也不允許(維護(hù)修改后極易遺漏,造成代碼隱患)。


    3. 用只讀變量適當(dāng)替代(類似功能的)宏,例如將#define PIE 3.14改為const float PIE = 3.14。


    這樣做的好處如下:


    1) 預(yù)編譯時(shí)用宏定義值替換宏名,編譯時(shí)報(bào)錯(cuò)不易理解;


    2) 跟蹤調(diào)試時(shí)顯示宏值,而不是宏名;


    3) 宏沒有類型,不能做類型檢查,不安全;


    4) 宏自身沒有作用域;


    5) 只讀變量和宏的效率同樣高。


    注意,C語言中只讀變量不可用于數(shù)組大小、變量(包括數(shù)組元素)初始化值以及case表達(dá)式。


    4. 用inline函數(shù)代替(類似功能的)宏函數(shù)。好處如下:


    1) 宏函數(shù)在預(yù)編譯時(shí)處理,編譯出錯(cuò)信息不易理解;


    2) 宏函數(shù)本身無法單步跟蹤調(diào)試,因此也不要在宏內(nèi)調(diào)用函數(shù)。但某些編譯器(為了調(diào)試需要)可將inline函數(shù)轉(zhuǎn)成普通函數(shù);


    3) 宏函數(shù)的入?yún)]有類型,不安全;


    5) inline函數(shù)會(huì)在目標(biāo)代碼中展開,和宏的效率一樣高;


    注意,某些宏函數(shù)用法獨(dú)特,不能用inline函數(shù)取代。當(dāng)不想或不能指明參數(shù)類型時(shí),宏函數(shù)更合適。


    5. 不帶參數(shù)的宏函數(shù)也要定義成函數(shù)形式,如#define HELLO( )  printf(“Hello.”)。


    括號(hào)會(huì)暗示閱讀代碼者該宏是一個(gè)函數(shù)。


    6. 帶參宏內(nèi)定義變量時(shí),應(yīng)注意避免內(nèi)外部變量重名的問題:


     typedef struct{


         int d;


      }T_TEST;


      T_TEST gtTest = {0};


     #define ASSIGN1(_d) do{ \


         T_TEST t = {0}; \


          t.d = _d; \


          gtTest = t; \


      }while(0)


     #define ASSIGN2(_p) do{ \


         int _d; \


         _d = 5; \


         (_p) = _d; \


     }while(0)


    若宏參數(shù)名或宏內(nèi)變量名不加前綴下劃線,則ASSIGN1(c)將會(huì)導(dǎo)致編譯報(bào)錯(cuò)(t.d被替換為t.c),ASSIGN2(d)會(huì)因宏內(nèi)作用域而導(dǎo)致外部的變量d值保持不變(而非改為5)。


    7. 不要用宏改寫語言。例如:


    #define FOREVER   for ( ; ; )


     #define BEGIN     {


     #define END       }


    C語言有完善且眾所周知的語法。試圖將其改變成類似于其他語言的形式,會(huì)使讀者混淆,難于理解。


    6.3 do{…}while(0)妙用


    1. 函數(shù)中使用do{…}while(0)可替代goto語句。例如:


    goto寫法


    替代寫法


    bOk = func1();


    if(!bOk) goto errorhandle; 


    bOk = func2();


    if(!bOk) goto errorhandle; 


    bOk = func3();


    if(!bOk) goto errorhandle;


     


    //… …


    //執(zhí)行成功,釋放資源并返回


    delete p;   


    p = NULL;


    return true;


     


    errorhandle:


    delete p;   


    p = NULL;


    return false;


    do{


          //執(zhí)行并進(jìn)行錯(cuò)誤處理


          bOk = func1();


          if(!bOk) break; 


          bOk = func2();


          if(!bOk) break; 


          bOk = func3();


          if(!bOk) break;


     


          // ..........


       }while(0);


     


        //釋放資源


        delete p;   


        p = NULL;


        return bOk;



    2. 宏定義中使用do{…}while(0)的原因及好處:


    1) 避免空的宏定義產(chǎn)生warning,如 #define DUMMY( ) do{}while(0)。


    2) 存在一個(gè)獨(dú)立的代碼塊,可進(jìn)行變量定義,實(shí)現(xiàn)比較復(fù)雜的邏輯處理。


    注意,該代碼塊內(nèi)(即{…}內(nèi))定義的變量其作用域僅限于該塊。此外,為避免宏的實(shí)參與其內(nèi)部定義的變量同名而造成覆蓋,最好在變量名前加上_(基于如下編程慣例:除非是庫,否則不應(yīng)定義以_開始的變量)。


    3) 若宏出現(xiàn)在判斷語句之后,可保證作為一個(gè)整體來實(shí)現(xiàn)。


    如#define SAFE_DELETE(p)  delete p; p = NULL;,則以下代碼


     if(NULL != p)


         SAFE_DELETE(p)


     else


         DUMMY( );


    就有兩個(gè)問題:


    a) 因?yàn)閕f分支后有兩條語句,else分支沒有對(duì)應(yīng)的if,編譯失??;


    b) 假設(shè)沒有else,則SAFE_DELETE中第二條語句無論if判斷是否成立均會(huì)執(zhí)行,這顯然違背程序設(shè)計(jì)的原始目的。


    那么,為了避免這兩個(gè)問題,將宏直接用{}括起來是否可以?如:


    #define SAFE_DELETE(p)  {delete p; p = NULL;}


    的確,上述問題不復(fù)存在。但C/C++編程中,在每條語句后加分號(hào)是約定俗成的習(xí)慣,此時(shí)以下代碼


     if(NULL != p)


         SAFE_DELETE(p);


     else


         DUMMY( );


    其else分支就無法通過編譯(多出一個(gè)分號(hào)),而采用do{…}while(0)則毫無問題。


    使用do{...} while(0)將宏包裹起來,成為一個(gè)獨(dú)立的語法單元,從而不會(huì)與上下文發(fā)生混淆。同時(shí)因?yàn)榻^大多數(shù)編譯器都能夠識(shí)別do{...}while(0)這種無用的循環(huán)并優(yōu)化,所以該法不會(huì)導(dǎo)致程序的性能降低。


    6.4 類型定義符typedef


    C語言不僅提供了豐富的數(shù)據(jù)類型,而且還允許由用戶自己定義類型說明符,也就是說允許由用戶為數(shù)據(jù)類型取“別名”。類型定義符typedef即可用來完成此功能。


    typedef定義的一般形式為:


               typedef 原類型名  新類型名


    其中原類型名中含有定義部分,新類型名一般用大寫表示,以便于區(qū)別。 


    例如,有整型量int a,b。其中int是整型變量的類型說明符。int的完整寫法為integer,為增加程序的可讀性,可把整型說明符用typedef定義為typedef  int  INTEGER。此后就可用INTEGER來代替int作整型變量的類型說明,如INTEGER a,b等效于int a,b。


    用typedef定義數(shù)組、指針、結(jié)構(gòu)等類型將帶來很大的方便,不僅使程序書寫簡(jiǎn)單而且意義更為明確,因而增強(qiáng)了可讀性。


    例如,typedef char NAME[20]表示NAME是字符數(shù)組類型,數(shù)組長(zhǎng)度為20。然后可用NAME 說明變量,如NAME a1,a2,s1,s2完全等效于:char a1[20],a2[20],s1[20],s2[20]。


    又如:


     typedef struct{


         char name[20];


         int  age;


         char sex;


     }STU;


    然后可用STU來定義結(jié)構(gòu)變量:STU body1,body2;


    有時(shí)也可用宏定義來代替typedef的功能,但是宏定義是由預(yù)處理完成的,而typedef則是在編譯時(shí)完成的,后者更為靈活方便。


    此外,采用typedef重新定義一些類型,可防止因平臺(tái)和編譯器不同而產(chǎn)生的類型字節(jié)數(shù)差異,方便移植。如:



      typedef unsigned char boolean;       /* Boolean value type. */


      typedef unsigned long int uint32;    /* Unsigned 32 bit value */


      typedef unsigned short uint16;       /* Unsigned 16 bit value */


      typedef unsigned char uint8;         /* Unsigned 8 bit value */


      typedef signed long int int32;       /* Signed 32 bit value */


      typedef signed short int16;          /* Signed 16 bit value */


      typedef signed char int8;            /* Signed 8 bit value */




      //下面的不建議使用


     typedef unsigned char byte;          /* Unsigned 8 bit value type. */


     typedef unsigned short word;         /* Unsinged 16 bit value type. */


     typedef unsigned long dword;         /* Unsigned 32 bit value type. */


     typedef unsigned char uint1;         /* Unsigned 8 bit value type. */


     typedef unsigned short uint2;        /* Unsigned 16 bit value type. */


     typedef unsigned long uint4;         /* Unsigned 32 bit value type. */


     typedef signed char int1;            /* Signed 8 bit value type. */


     typedef signed short int2;           /* Signed 16 bit value type. */


     typedef long int int4;               /* Signed 32 bit value type. */


     typedef signed long sint31;          /* Signed 32 bit value */


     typedef signed short sint15;         /* Signed 16 bit value */


     typedef signed char sint7;           /* Signed 8 bit value */


    在線留言

    ◎歡迎您的留言,您也可以通過以下方式聯(lián)系我們:

    ◎客戶服務(wù)熱線:021-51095123

    ◎郵箱:xin021@126.com

    展開
    99精品人妻一区二区三区蜜桃_国产精品99视频_亚洲AV久播在线播放青青尤物电_国产亚洲第一精品_精品午夜久久_在线视频一区亚洲欧美_国产一区精品在线免费_在线亚洲日产一区二区_亚洲高清中文无码_免费精品国产自产拍观看
    成人久久精品免费观看| 亚洲av网站网址免费观看| 亚洲一区二区在线免费观看| a级毛片激情在线看| av激情影院在线看| 三级人妻中文字幕视频| 亚洲日本在线观看网址| 色综合一区二区三区| 狠狠综合久久久综合| 丝袜午夜福利在线观看| av免费在线观看男人得区的天堂 | 国内福利精品视频| 国产av高清亚洲精品高清一部| 亚洲黄色一片在线观看| 国产女啪啪视频| 国产精品原创永久在线观看| 国产在线精品一区二区三区直播 | 国产三级国产精品国产| 一区二区88国产伦精品一区| 国产日韩欧美网站在线观看| 天堂AV无码AV毛片毛| 自拍视频在线观看亚洲福利| 亚洲欧美精品午夜一区二区| 天堂国产欧美一区二区三区| 最新在线精品国产福利| 新99热超碰国产精品| 男人的天堂网页av中文字幕| 少妇午夜福利一区二区三区| 国产美女精品一区二区三99视频| 激情亚洲综合婷婷| 激情伊人老男人亚洲av| 欧美日韩精品乱国产| 亚洲一区二区三区免费视频| 国产aⅴ精品一区二区三区久久| av天堂中文字幕网| 色综合一区二区三区| 草草影院一级毛片a级| 国产精品视频看一下| 成人久久午夜熟妇| 亚洲一二三在线| 亚洲国产精品久久人人爱| 少妇舔av日韩| 国产精品久久一区一区| 国产女人伦码一区二区三区不卡| 久久久7777888精品| 国产欧美久久久另类精品| 欧美在线精品一区二| 亚洲av二区三区四区| 亚洲美女高潮视频免费| 久久亚洲av成人国产| 国产区在线观看一区二区| 99热这里只有是精品50| 99ri国产精品| 亚洲精品国产拍拍拍拍拍| 26uuu在线欧美| 日韩精品在线一区二区| 日本a级精品一区二区三区| 久久国产精品免费一区二区三区| 国产又大又黄的免费视频| 综合激情丁香久久狠狠男同| 亚洲高清国产一区| 久久亚洲中文字幕国产视频| 亚洲国产欧洲精品| 欧美国产一区二区二区| 亚洲AV无码国产精| 91精品国产麻豆| 亚洲国产对白在线观看| 香蕉国产成人免费精品视频| 国产亚洲欧美国产亚洲欧美| 成年男女男精品免费视频网站 | 国产内射视频在线| 97婷婷色综合| 国产成人手机视频| 久久久精品午夜福利| 中文字幕在线观看国产| 国产精品人人爽人人爱做| 中文一级毛片| 一区二区三区国产高清在线观看| 中文日韩欧美| 五月天激情久久综合一区| 在线精品91av电影| 无码永免费| 日韩在线视频欧美一区| 精品二区人妻| 欧美片欧美日韩国产综合片| 国语自产精品视频熟女| 日韩av大香蕉在线| 亚洲欧美日韩不卡一区二区三区 | 国产成人在线视频播放| 最新亚洲精品国自产在线| 亚洲国产一区久久蜜臀| 国产午夜视频在线观看| 最近中文字幕人妻av | 午夜午夜精品一区二区三区| 日韩欧美国产亚洲| 欧美成人一区二区综合网| 国产精品丝袜在线不卡| 美女视频亚洲免费| 久久最新免费视频| 久久国产亚洲高清观看5388 | 欧美精品亚洲二区| 久久青草免费91观看| 91老司机精品在线视频| 婷婷六月久久综合丁香一二| 亚洲人妻在线视频| 国产91对白刺激露脸在线观看| 亚洲成av人免费观看| 不卡一区二区三区在线免费视频| 亚洲国产成人久久笫一页| 国产亚洲精品国产| 亚洲国产经典| 国产精品一区二区不卡顿 | 国产精品自拍一区| 国产免费一区二区三区在线观看| 午夜福利av片| 成人AV无码国产在线一区| 青青草99久久精品国产综合| 亚洲一区二区日韩精品| 97福利视频导航欧美一区| 国产在线91丝袜| 国产欧美日韩综合精品一区二区亚洲| 日本欧美一区二区三区免费不卡 | av天堂免费在线| 亚洲无av中文字幕| 日韩精品精品第一区| 最新国产免费av网址| 欧美日韩国产一线天| 亚洲精品9999久久久久无码| 亚洲国产欧美色影院| 高跟丝袜色搞精品三区| 中国日韩欧美中文日韩欧美色 | 亚洲日韩五十路熟女视频| 亚洲av乱码国产精品色午麻豆h| 婷婷国精极品翘臀少妇人妻| 久久精品国内热| 亚洲av免费在线观看电影| 久久伊人色综合| 亚洲欧美日韩国产| 国产乱人伦偷精品视频免观看| 亚洲美女视频精品| 成人精品无码一区二区在线观看| 国产成人国产在线观看入口| 国产成人精品亚洲| 中文字幕日韩欧美在线网| 色噜噜狠狠色综合久| 国产欧美日韩一区| 亚洲国产成人久久综合碰碰文| 亚洲成人国产精品| 成在线人av免费高潮喷水| 视频区小说区图片区激情| 中日韩欧美成人免费播放| 97精品国产高清自在线看超| 欧美日韩国产区在线观看| 国产成人综合亚洲欧美| 国产精品一区二区久久宅男| 欧美日韩一区二区精彩视频| 97视频免费在线| 亚洲中文在线视频| 国产精品免费观看1| 久久精品国产99精品国产亚洲性色| 天堂网国产| 国产午夜精品电影成人| 国产拍精品亚洲精品| 亚洲avav天堂av精选| 国产免费成人在线视频| 99re视频在线精品免费播放| 欧美成人亚洲综合精品欧美激情 | 亚洲人成欧美中文字幕午夜| 中文日韩免费码中文在线观看 | 国产精品天堂网av| 天堂在线www天堂中文在线| 色哟哟91精品色哟哟| 国产在线精品一区免费| 亚洲精品永久www嫩草| 国产欧美日本亚洲精品一4区| 国产午夜免费视频| 午夜理论国产激情| 亚洲欧美综合成人| 欧美成人精品中文字幕| 无码区a∨视频体验区30秒| 色婷婷久久综合中文久久蜜桃| 亚洲免费国产视频| 一本av高清一区二区三区| 国产综合另类在线观看| 国产精品亚洲第一区广西莫菁| 精品亚洲永久免费| 久久综合日韩亚洲精品色| 亚洲欧美精品成人a| 日韩在线免费观看av网站| 中文字幕综合网| 在线成人一区二区视频| 在线精品91av电影| 欧美久久精品中文字幕一区二区| 一本色道久久综合狠狠躁篇 | 午夜精品网影院| 日韩免费一区二区| 婷婷亚洲综合网| 国产免费高清在线精品一区| av在线中文字幕天堂| 亚洲无码视频在线观看0| 国产在线精品一区二区2020年| 国产一级淫片免费播放| 欧美日韩亚洲国产| 国产乱码视频一区二区| 欧亚熟女手机视频| 亚洲精品无码人妻| 国产av色中文字幕| 一区二区三区四区国产| 人妻精品综合久久久久| 久久99热免费国产精品| 在线不卡av片免费观看高清| 亚洲一区二区三区在线视频| 日韩有码在线视频一区| 亚洲精品少妇无码在线观看| 国产欧美日韩不卡在线播放在线| 国产精品亚洲欧美日韩一区二区| 国产精品欧美激情在线播放| 色婷婷久久综合中文久久一本` | 亚洲一区二区中文字幕| 99视频在线精品自拍| 精品国产三级一区二区| 国产系列丝袜熟女精品视频| 久婷婷综合欧美狠狠| 麻豆精品视频91| 亚洲欧美电影在线一区二区| av网站国产日韩| 久久亚洲综合色| 日韩毛片av在线| 麻豆国产亚洲精品不卡视频 | 国产综合久久久久| 日韩欧美精品国产一区二区| 国产成人综合久久婷婷| 成人午夜视频在线观看| 国产成人精品久久| 成人久久午夜熟妇| 天堂8中文在线网| 久久99精品国产麻豆婷婷| 99久久精品国产一区二区小说| 亚洲无码免费看| 久久蜜桃av| 久久亚洲AV无码精品线院色欲| 色综合小说久久综合图片| 亚洲婷婷丁香| 国产精品无码AV片在线观看播| 国产免费综合色视频| 日韩无码一二三区| 精品中文字幕专区| 少妇无码视频专区网站| 国产91精品一区二区| 国产欧美精品一区二区| 久久精品亚洲国产77777| 国产三级精品三级在线观看专1| 欧美在线精品一区二区三区 | 久久精品网亚洲| 色综合久久中文字幕综合网| 亚洲av线上观看| 亚洲不卡av中文在线| 午夜短视频日韩免费| 欧美日韩国产一线天| 欧美成人精品欧美一级黄| 99热精品免费| 国产亚洲第一伦理第一区| 久久精品里有精品| 亚洲欧美日韩精品一区二区| 久久精品欧美日韩精品不卡| 精品国产美女在线观看午夜 | 亚洲国产成人在线一区| 日韩毛片在线免费观看| 激情综合亚洲欧美日韩| 免费国产h视频在线观看| 91人妻人人澡人人爽人精品| 免费A级毛片无码免费视频| 国语精品一区自产拍在线观看| 国产免费黄频在线观看| 两个人免费视频大全毛片| 国产成人亚洲精品| 午夜无码国产理论在线| 91福利视频一区| 欧洲精品无码一区二区在线观看| 婷婷六月久久综合丁香一二 | 91久久线看在观草草青青| 国产成人免费视频| 一区二区三区精品在线免费观看| 国产成人高清亚洲综合| 人妻av一区二区三区麻豆| 久久ri精品国产亚洲| 亚洲欧美日本久久综合网| 欧美日韩国产色综合一二三四| 亚洲午夜综合色婷婷| 亚洲精品又黄又爽无遮挡| 国产福利在线永久视频青草| 人妻少妇久久中中文字幕| 国产精品无码成人久久久| 国产日韩亚洲激情| 久久亚洲AV无码精品色午夜麻豆| 99久久国产免费中文无字幕| 亚洲国产精品视频一区二区| 在线国产中文字幕| 久久精品青草网| 久久综合一区二区三区| 国产国拍亚洲精品mv在线观看| 国产精品美女被啪啪啪| 亚洲欧洲无码专区在线观看 | 久久伊人久久亚洲综合| 91在线一区二区| 国产最新精品福利在线观看| 日韩国产欧美在线观看一区二区| 成年人在线观看免费视频| 国产毛片一区二区三区| 国产制服丝袜无码视频| 中文字幕人妻偷拍| 我要看免费的黄色毛片| 国产永久福利在线视频| 色综合久久丁香婷婷| 亚洲中文字幕精品第三区| 国产日韩欧美中文制服| 国产亚洲欧美另类久久久| 国产精品1234不卡| 青青草原亚洲天堂| 亚洲欧美在线视频免费| 国产精品短篇二区| 亚洲国产成人爱av在线播放| 中文字幕综合一区| 欧美亚洲综合久久网| 国产美女颜射视频| 麻豆国产成人啪精品视频网站| 香蕉精品网在线| 亚洲精品伦理影院| 日韩精品中文字幕一区三区 | 中文字幕乱码人妻无码久久| 中文字幕亚洲制服丝袜无码| 操老熟女国产| 午夜精品久久久久久99热7777| 无遮挡免费av片在线观看| 毛片在线播放亚洲免费中文网| 久久精品国产亚洲av免费观看| 人妻中文字幕在线视频…| 精品国产av噜噜一区二区| 每日在线观看亚洲av| 午夜精品人妻少妇av| 日韩欧美精品一区二区乱码人| 制服丝袜中文字幕av| 51久久夜色精品国产麻豆| 精品午夜在线播放视频在线| 丝袜诱惑中文字幕二区| 亚洲午夜综合网| 精品国产人成在线| 在线播放亚洲精品| 久久一区二区三区视频免费观看| 日本网站在线免费| 国产亚洲精品国看不卡| 91不卡在线精品国产| 亚洲国产成人a精品不卡在线| 日韩精品免费在线视频| 欧美成人精品区网站| 国产美女被爽到高潮视频| 中文字幕高清av在线| 国产美女一区二区在线观看| 欧美一区日韩精品| 国产成人精品福利久久| 精品一区二区影院| 欧美日韩高清在线观看一区二区| 久久爆乳一区二区免费播放 | 成人精品网站在线观看| 日韩精品第一区| 日韩v国产v亚洲v精品v| 欧美一区二区三区四区久久精品| 亚洲免费熟女| 最新国产午夜精品视频不卡| 国产成a人亚洲精| 日本欧美一区二区在线| 福利av动漫在线观看| 精品国产久一区二区三区| 日韩精品在线观看中文字幕| 国产精品国产三级国产av尤物| 精品毛片免费看| 国产高清在线精品一区二区三区| 在线无码国产观看播放网址| 在线99精品视频| 亚洲av超淫| 亚洲精品人成在线观看| 永久免费a级在线视频| 亚洲影院av在线| 亚洲国产区在线| 亚洲天堂久久亚洲| 久久久久久国产视频| 国产精品午夜在线| 欧美亚洲国产精品系列在线一区| 久久国产成人精品| 亚洲日本精品va中文字尊| av在线不卡免费播放| 香蕉一区二区三区在线视频 | 99这里只有精品9| 国产福利在线精品观看| 欧美日韩无线在码不卡一区二区三区| 亚洲欧美日韩国产成人精品| 久久综合久久一本| 四虎精品成人免费观看| 无码精品人妻一区二区三区漫画| 亚洲综合在线视频色| 国产精品久久久久久久hd| 亚洲国产欧洲另类视频| 亚洲丝袜美腿一区| 国产精品123区| 国产精品原创永久在线观看| 亚洲高清欧美日韩| 9久久免费国产精品特黄| 中文字幕在线有码二区| 亚洲合色在线播放| 国产美女一区二区| 在线观看一区二区欧美日韩| 国产成人精品自拍| 亚洲一区二区久久久| 欧美国产一区二区二区| 亚洲av无一区二区| 免费国产h视频在线观看| 亚洲精品无码日韩国产不卡| 亚洲成av天堂| 热re99久久精品国99热| 亚洲人成在线网站观看| 日韩欧美亚洲综合一区二区| 国产精品日韩欧美一区二区| 日本高清不卡在线| 国产在线观看91精品2021| 国产精品扒开内射| av在线不卡播放| 久久综合成人网| 狠狠色丁香婷婷综合激情| 午夜无码亚| 中文字幕久久精品第一页| 欧美亚洲大陆麻豆久久| 成人免费视频在线| 精品国偷自产在线视频99| 精品国产成人麻豆| 国产一区二区三区欧美| 色婷婷综合国产精品| 久久精品国产2020| 高清在线亚洲欧美| 四虎影永久在线观看精品| 91福利国产在线观看网站| 亚洲欧美国产第一区| 欧美日韩一区二区三区在线| 一级片在线观看91| 日韩欧美综合亚洲| 亚洲美女黄免费a| 日韩欧美国产二区| 亚洲欧美日韩精品中文乱码| 久久综合国产成人| 久久亚洲国产欧洲精品一| 成人黄色在线观看网站| 99久久国产综合精品女不卡| 欧美日韩精品99免费| 久久99精品一久久久久久| 国产极品美女做到高潮视频| 91久久亚洲最新一本| a级黄片毛片在线观看| 精品国产v无码大片在线看| 免费观看国产精品福利永久| 欧美日韩激情在线一区二区| 亚洲激情视频一区二区三区| 国产精品免费拍拍拍| 国产精品高清视亚洲中文| 亚洲国产福利精品一区二区| 色婷婷综合国产精品| 亚洲精品成人网站在线观看| 国产精品日韩欧美| 草草影院二区| 亚洲日韩国产另类精品乱码小说| 正在播放亚洲精品| 天天躁日日躁夜夜躁狠狠躁| 亚洲人成在线网站观看| 无码毛片AAA在线| 亚洲成a在线观看| 日韩精品欧美视频| 亚洲中文aⅴ中文字幕在线网址| 91久久线看在观草草青青| 久久精品里有精品| 亚洲国产精品久久又爽av| 国产乱人视频在线观看播放| 亚洲精品国产麻豆| 国产精品久久1024| 国产欧美二区三区| 午夜人伦视频在线观看| 99精品国产在热久久婷婷人| 精品欧美亚洲韩国日本久久| 中国免费色视频国产| 福利视频在xx| 成人免费国产欧美日韩你懂的| 欧美日韩乱妇高清无乱码| 国产午夜亚洲精品不卡福利| 国产精品无套白浆流出 | 97久久超碰精品高清国产| 国语自产免费精品视频一区二区| 999国内免费精品视频| 欧美成人午夜精品一区二区| 欧美日韩一区二区三区色综合| 美女国产一区二区视频| 色噜噜五月婷婷| 欧美日韩成人精品久久二区| 亚洲福利在线视频| 日韩在线精品| 国产人伦在线观看视频网站| 亚洲综合一区二区三区四区| 日韩在线视频免费不卡一区| 一级黄色免费不卡视频| 最新中文字幕免费视频| 亚洲精品国产a| 中文精品久久久久中文| 亚洲精品在线专区| 国产激情一区二区三区在线蜜臀| 在线亚洲日产一区二区| 欧美一级夜夜爽视频| 韩国三级亚洲精品| 激情综合五月丁香亚洲| 亚洲国产一区二区在线视频| 精品无码国产拍自产拍在线| 日韩.欧美.国产.无需播放器 | 国产一区二区三区精品视频| 91精品一区二区| 日韩a级毛片在线| 国产精品福利导航| 精品久久国产影院| 亚洲日韩东京99热综合精品在线 | 91桃色国产线观看免费| 久久精品人妻少妇| 被侵犯内射的人妻中文字幕| 国产精品亚洲А∨无码播放不卡| 国产精品一区91| 大陆一级毛片国语精品| 99精品这里只有精品| 国产欧美一区二区精品秋霞影院| 亚洲成人国产一区二区三区| 国产亚洲欧美视频| 欧美成人午夜不卡在线视频| 精品国产伦一区二区三区在线观| 亚洲高清日韩国产av| 精品久久香蕉国产线看观看亚洲 | 欧亚精品欧亚高清免费视频在线| 日韩一区二区在线视频| 精品精品国产自在久久| 国产亚洲精品97在线观看| 久久免费99精品国产自在现线 | 中美日韩亚洲中文专区小说| 成人欧美精品大91在线| 国产欧美亚洲精品第二区首页| 视频亚洲免费观看| 久久网欧美| 91嫩草国产日韩欧美| 国产精品免费αv视频| 亚洲美女激情在线视频| 亚洲一区久久精品| 国产三级在线免费看片| 国产黄色片子在线观看| 毛片一区二区三区在线| 亚洲欧美日韩在线专区| 精品国产aⅴ| 久久青草亚洲| 日韩视频久久| 日韩高清一区二区三区不卡| 国产欧美日韩网站| 成人午夜在线观看国产| 久久精选视频| 久久综合综合久久97色| 亚洲国产精品成人综合色在线婷婷| 久久夜色精品国产亚洲噜噜∧v | 亚洲精品国产啊女成拍色拍| 亚洲精品色无码av| 人妻系列综合中文字幕久久| 午夜福利无码不卡一区| 亚洲国产成人综合熟女| 亚洲AV乱码一区二区三区林ゆな| 91中文字幕aaa| 欧美国产精品系列| 亚洲欧美成人综合精品| 国产精品久久一区三区| 国产毛片内射能看的| 久久9精品| 美腿丝袜中文字幕第一区| 国产成人精品三级| 日韩精品在线观看中文字幕| 亚洲国产精品视频自拍| 国产精品亚洲一区二区在线观看| 99久久精品免费看国产一区二区| 色噜噜狠狠狠综合曰曰曰88av | 国产欧美亚洲精品综合在线| 欧美精品一区二区三区久久| 亚洲国产精品一| 久久国产亚洲精品超碰热| 天堂最新资源在线| 久久免费看少妇av高潮毛片| 67194欧美日韩国产| 国产噜噜噜在线观看| 久久国产精品72福利| 中文字幕乱码熟女xx少妇| 无卡无码中文字幕免费| 免费午夜无码视频在线观看| 国产毛片一区二区三区bd| 亚洲天堂诱惑蜜桃av| 欧美日韩成人三区| 91国偷自产一区二区三区精品| 乱人伦黄色视频网站| 中文字幕av伦| 精品国产免费一区二区三区香蕉| 亚洲第一区视频在线观看| 97国产精品欧美一区二区三区| 日韩欧美在线精品| 亚洲无码高潮| 久久久久青草线综合超碰| 国语对白一区二区三区| 熟女精品国产一区二区三区| 日韩在线一区免费观看网址| 中文字幕色久视频| 久久久久久国产精品mv| 九九热这里有精品| 国产精品丝袜在线| 日韩av中文字幕第一页乱码| 一亚洲中文字幕无线| 黄色av一级拍在线看| 日韩熟女内射| 欧美日韩亚洲一区二区三区| 日韩国产精品99久久久久久| 91免费国产精品| 91精品国产麻豆| 无遮国产成人免费视频在线观看| 被侵犯内射的人妻中文字幕| 欧美亚洲精品日韩国产精品专区| 欧美国产日韩在线观看| 国产精品亚洲综合五月天| 视频精品久久| 另类欧美亚洲国产| 岛国大片免费观看不卡| 色综合视频一区二区三区| 国产一区二区福利久久| 日韩精品欧美在线视频| 91精品国产无线乱码在线| 国产亚洲av综合人人精品| 麻豆国产成人啪精品视频网站| av中文乱码字幕在线| 国产一区二区三区在线视频播放 | 国内福利精品视频| 99精品免费久久a级影院| 免费亚洲va| 亚洲精品91在线| 欧美在线一区二区三区| 久久无码中文字幕无码| 欧美中文日韩亚洲| 一区二区欧美日韩亚洲| 国产日韩欧美二区| 91精品在线播放视频| 一个色精品在线视频| 亚洲av免费观看地址| 亚洲一区二区中文字幕| 乱码一区二区三区在线观看国产| 免费观看成人www精品视频在线| 日韩亚洲欧美一区噜噜噜| 中字无码av电影在线观看网站| 成人国产精品2024| 亚洲瑟瑟视频在线观看不卡| 国产做国产爱免费视频| 亚洲国模精品一区二区| 国产精品视频久久久久久| 色狠狠色狠狠综合一区| 亚洲精品第一综合99久久| 日韩尤物在线播放| 国产精品人妻久久毛片| 亚洲精品第二区| 99热这里只有精品最新网re| 五月天激情婷婷婷久久| 日韩亚洲一中文字幕| 久久国内免费视频| 亚洲大片欧美大片| 九九视频网站在线| 欧美视频一区二区三区四区| 五月天Av中文在线| 日韩精品人妻中文字幕在线| 精品国产人成在线| 国产欧美日韩精品61在线不卡| 精品视频在线播放一区二区三区| 国产精品一区视频| 伊人网在线免费视频| 国产av色婷婷| 夜夜嗨色综合av麻豆精品| 久久夜色精品国产男人亚洲av| 91在线一区二区| 99久久精品免费看国产四区| 国产男人免费黄色视频| 国产精品久久久久久久9999| 中文字幕内射人妻在线| 国产真人在线一区二区三区| 性xxxx视频播放免费| 狠狠爱亚洲综合欧美| 亚洲欧美日本另类| 久久亚洲av毛片精品二区| 最新国产精品熟女| 91最新亚洲精品中文字幕| 欧美婷婷六月丁香综合区| 国产91高潮流白浆在线观看| 蜜臀精品国产一区二区| 亚洲一区二区国产精选| 亚洲第一av片精品堂在线观看 | 老司机网午夜精品久久| 91精品国产乱码在线观看| 国产精品特色特黄av| 国产激情视频在线观看| 久久精品无码一区二区软件| 欧美综合区自拍亚洲综合图区| 久久精品综合亚洲精品四虎| 熟女国产专区| 国产精品激情小视频| 成人午夜视频一区二区| 欧洲中文日韩亚洲精品视频| 国产精品公开免费视频| 久久这里有精品视频免费| 美女网站一区二区三区| 午夜国产成人精品aaa视频| 国产精品黄网站免费观看| 久久福利国产精品| 日韩在线精品| 成人中文字幕影院| 欧美日韩国产免费一区二区三区| 日韩人妻中文字幕乱码一区| 欧美日韩一区二区综合在线视频| 91精品国产自产91精品资源| 久久五月女厕所一区二区| 日韩美女免费线视频网址| 国产国产成人精品久久| 亚洲国产精品久久又爽av| 国产激情一区二区三区中文三级| 黄色视频在线播放免费不卡| 中文字幕亚洲激情| 国产偷亚洲偷欧美偷精品| 全亚洲最色的网站在线观看| 亚洲网址在线观看| 精品国产免费一区二区| 国产伦精品一区二区三区网站 | 欧美亚洲国产另类| 国产精品久久免费| aa级毛片免费网站| 中文字幕无码区一区二区| 97欧美激情一区二区三区成人| 日本不卡视频| 99久久夜色精品国产亚洲| 亚洲人成网址| 三级视频在线播放线观看| 亚洲国产成人久久| 日韩AV无码一区二区三区不卡毛片| 天堂网国产| 欧美在线视频一区二区| 亚洲综合色成在线| 亚洲最新网站| 精品国产一区二区在线观看| 欧美成人中文在线视频| 亚洲日韩五十路熟女视频| 尹人香蕉久久99天天拍欧美p7| 青草草在线观看视频| 午夜精品视频在线观看| 67pao国产成视频永久在线观看| 国产伦高清一区二区三区| 欧美精品福利视频不卡| 成人午夜免费国产| 亚洲国产欧美日韩精品一区二区三区| 国产福利在线永久视频| 欧美日韩精品一区二区精品| 免费精品国产自产拍观看| 中文字幕久久精品第一页| 毛片网站在线| 亚洲午夜中文字幕在线| 狠狠色婷婷狠狠狠亚洲综合| 一区二区三区欧美在线精品观看| 国产亚洲精品成人a在线| 亚洲av专区在线电影成人av片| 国产精品每日更新在线观看| 欧美激情中文字幕综合一区| 国产精品1区2区3区在线播放| 亚洲国产精品一| 亚洲国产综合人成综合网站| 国产91高潮流白浆在线观看| 成年人午夜视频在线观看网站| 国产成人在线免费| 久久99精品国产综合毛片宅男| 亚洲欧美日韩国产一区二区| 韩国精品一区二区久久| 久久久久国产亚洲日本| 欧洲一区二区三区在线观看| 国产一本一道久久香蕉下载| 亚洲国产日韩欧美在线看片| 国产精品免费观看一区| 国产日韩欧美在线观看视频| 久久久亚洲AV无码| 狠狠综合久久久综合| 97超碰国产精品久久| 国产精品国产成人三级| 亚洲国产精品欧美综合| 久久91这里精品国产2020| 亚洲成av人免费观看| 午夜欧美福利网站| 欧美日韩综合| 成人国产精品免费视频| 久久精品亚洲熟妇少妇任你| 日韩一区国产二区欧美三| 国产黄色又大又爽又好看| www久久久888| 国产天堂在线视频| 免费在线视频a| 精品欧美一区二区三区久久久| 国产欧美视频一区二区三区| 老司机午夜精品99久久免| 丝袜中文字幕人妻中处| 69综合网| 国产精品永久免费网站| 亚洲欧美日本综合| 亚洲无码午夜激情在线观看| 国产精品社区在线观看| 国产欧美一区二区精品99| 欧美激情亚洲一区中文字幕| 亚洲国产精品一区二区九九| 国产一区二区视频一站在线观看| 日本黄色视频高清不卡| 午夜福利av不卡| 国产成人精品无码一区二区| 久久久久久国产精品免费无码| 久久99精品久久久久久综合| 国产成人精品午夜| 一区二区三区免费在线| 免费av在线永久观看| 亚洲国产成人午夜在线一区| 孕妇久久夜色精品国产爽爽| 亚洲综合激情另类小说区| 色女Av免费在线| aa级国产女人毛片水真多| 亚洲欧美日韩国产综合在线| 国产97色在线/日韩| 成人在线国产一区二区| 亚洲国产精品日韩av| 国产福利一区在线观看视频| 欧美精品一区二区三区百| 国产精品一区二区日韩欧美亚洲| 国产色噜噜噜在线观看| 国产精品福利片一区二区| 精品久久香蕉国产线看观看亚洲| 国产精品视频中文字幕91| 99日精品欧美国产| 成人免费国产欧美日韩你懂的| 亚洲国产精品免费| 强奷乱码中文字幕不卡| 亚洲一欧洲中文字幕在线| 欧美无遮挡一区二区三区| 国产精品18久久久久久vr| 亚洲成a人片在线观看网| 中文字幕人妻久久一区二区三区| av中文字幕在线8| 丁香亚洲五月| 一级片在线观看91| 欧美一区二区三区香蕉视| 国产91精品在线| 亚洲视频网站在线播放| 色天使久久综合给合久久97色| 国产情侣在线视频一区| 国产精品亚洲无套在线观看| 欧美日韩国产自在自线| 欧美日本中文国产一区发布| 亚洲综合激情网| 国产精品亚洲一区二区三区| 狠色狠色狠狠色综合久久| 日本一区二区三区在线视频 | 五月天综合婷婷| 久久精品第一区| 午夜三级在线| 有码中文字幕在线观看| 国产深夜av在线网站免费观看| 久久国产精品久久精品国产| 亚洲中文字幕欧美在线| 最近中文字幕久久精品| av中文字幕天堂在线| 精品免费国产视频视频| 日韩精品无码一区二区三区| 国产亚洲精品国看不卡| 综合久久91| 韩国精品一区二区久久| 亚洲欧洲中文日韩A乱码| 久久夜色精品国产亚洲| 国产乱人伦免费视频| 亚洲超欲av在线| 1024国产精品免费| 国产欧美日韩精品第二区| 精品在线一区二区| 国产麻豆精品免费视频| 久久99久久无码毛片一区二区| 国产91探花精品一区二区| 中文字幕av专区无码不卡| 亚洲国产日韩欧美高清片a| 96人妻精品一区二区三区| 亚洲免费成人观看| 18国产精品福利片免费看| av在线网中文字幕| 狠狠综合久久久综合| 中文乱码精品一区二区三区| 日韩在线精品亚洲专区| 亚洲首页国产精品丝袜| 亚洲s色大片在线观看网站| 久久精品国产欧美a| 免费精品视频久久一级| 久久综合精品国产一区二区三区| 亚洲成在人网站天堂一区二区| 日韩免费不卡视频| 亚洲欧美激情一区二区三区国产| 久久精品99久久无色中文| 亚洲最大成人中文| 日本一区二区在线| 亚洲 自拍 另类小说综合图区| 国产亚洲精品久久午夜| 日韩美二区视频| 亚洲av禁片在线观看| 久久国产精免费| 亚洲一区二区三区欧美| 欧美日韩精品一区二区三区视频在线| 亚洲首页国产精品丝袜| 在线精品亚洲欧美日韩| 亚洲男人的天堂@久久| 欧美日韩亚洲综合中文字幕 | 国产无遮挡裸露视频免费网站 | 高清中文字幕国产| 亚洲欧美韩国日产综合在线| 亚洲国产乱爱| 日本a级精品一区二区三区| 欧美日韩国产另类一区二区三区| 午夜福利视频一区二区免费看| 亚洲精品午夜天堂福利av| 中文字幕色久视频| 欧美亚洲国产成人精品| 在线播放欧美日韩国产| 日韩精品电影一区亚洲高清| 97久久精品无码一区二区| 97国产视频| 亚洲午夜福利片在线播放| 亚洲国产精品久久人人爱| 久久久久久久一线毛片| 色婷婷美利坚合众国| 国产又黄又猛又色又爽的视频| 日韩欧美一区二区中文字幕| 日韩国产欧美中文综合| 午夜黄色福利免费观看| 欧美日韩永久久一区二区三区| 国产亚洲精品岁国产微拍精品| 欧美亚洲h在线一区二区| 五月婷婷丝袜诱惑中文字幕| 国产一级二级在线观看| 永久天堂网av手机版| 亚洲国产成人欧美在线观看| 成人精品综合免费视频| 亚洲国产女人久久| 97色婷婷成人综合在线| 美女隐私视频黄www在线看| 精品午夜久久| 丁香在线免费视频| 亚洲av无码欧洲av无码网站| 国产大屁股视频免费区| 成人欧美一区二区三区视频不卡 | 久久精品国产精品国产精品污| 91超碰中文字幕| 高清av二区免费播放| 精品国产AV无码一区二区 | 国产一区亚洲欧美成人| 中文在线观看免费www的网站| 高清国产在线播放成人| 国产99久久九九免费精品| 亚洲精品678在线播放| 色综合久久98天天综合| 久久青草国产午夜| 人成午夜免费大片在线观看| 精品黑人xxx一区一二区| 亚洲欧洲久久久精品| 亚洲欧美国产高清va在线播 | 久久五月激情婷婷日韩| 亚洲av乱码专区国产专区| 国产成人免费久久精品| 亚洲国产精品精品国产亚洲综合| 亚洲国产精品免费播放| 久久婷婷五月综合中文字幕| 午夜天堂精品| 依依成人精品无v国产| 熟女精品国产一区二区三区| 精品无码久久| 国产日韩欧美资源在线观看| 在线观看亚洲AV日韩A∨| 国产无遮挡裸露视频免费网站 | 久热99精品在线播放| 大香蕉av在线资源| 欧美日韩激情综合一区二区三区| 国产在线一区二区三区精| 四虎成人精品国产一区a| 一区二区三区久久国产| 亚洲国产欧美日韩精品一区二区三区| 黄色中文字幕av网站| 亚洲AV日韩AV无码AV另类| 国产综合欧美| 国产欧美精品一区aⅴ影院| 亚洲天天看| 久久av喷吹av高潮| 免费一区二区三区日韩欧美| 国产日韩欧美视频| 精品人妻少妇一区二区三99| 欧美日韩一区二区三区色综合| 国产在线精品一区二区三区免费| 久久亚洲综合色| 国产精品国产色婷婷| 午夜性色一区二区三区不卡视频| 日韩一区三区视频| 国产伦精品视频一区二区三区| 欧美视频在线第一页| 亚洲AV无码国产精品夜色午夜| 人妻在线系列一区二区三| 91在线精品老司机免费播放| 欧美日韩国产自在自线| 免费在线a视频| 色噜噜国产精品视频一区二区| 中文精品99久久国产香蕉| 亚洲视频免费一区| 久久成人精品在| 午夜福利亚洲精品| 欧美激情一区二区三区| 久久精品亚洲国产aⅴ播放| 亚洲成人第一页| 亚洲精品中文av字幕乱码在线观看 | 精品午夜视频一区二区三区| 91热久久免费频精品| 亚洲综合国产精品第一页| 伊人久久综合网亚洲| 久久久精品波多野结衣AV| 青青草99热这里都是精品| 亚洲午夜久久av男人的天堂| 99久久精品国内| 99精品免费久久a级影院| 国产特一级毛片| 国产成人啪精品视频免费网站下载| 岛国av不卡免费看| 日韩精品亚洲精品第一页| 在线精品国精品国产不卡| 久久精品国产亚洲亚洲www| 亚洲精品高清国产麻豆专区| 小说区图片区综合久久亚洲| 在线免费观看无遮挡| 午夜不卡亚洲视频| 国产精品三区中文在线| 97在线线视频| 午夜精品福利80| 亚洲一区二区乱码在线观看| 欧美国产日韩精品| 中文字幕免费视频一区| av网站观看不卡| 亚洲成人精品自拍| 亚洲视频一区在线| 久久亚洲不卡一区二区 | 福利片免费一区二区三区| 天堂8中文在线网| 欧洲AV秘 无码一区二区三| 欧美综合一区黑人| 加勒比日本国产不卡| 欧美精品成人在线视频| 亚洲欧美国产日韩综合久久| 欧美视频在线一区二区三区| 中文在线观看免费www的网站| 成人a大片在线观看| 91精品国产综合成人| 国产av色中文字幕| 国产乱码精品一区二区三区亚洲人| 久久青青草原国产免费收看| 亚洲国产成人99精品激情在线| 亚洲一级中文字幕在线| 综合欧美日韩国产成人| 国产av激情久久| 国产成人精品亚洲午夜| 国产精品自在在线香蕉| 亚洲av综合日韩av| 韩国三级亚洲精品| 亚洲国产看片吧| 国产三级精品视频| 国产精品原创不卡在线| 国产在线中文字幕| 在线亚洲精品91| 超碰中文字幕| 久久国产狼人精品| 伊人久久大香线蕉综合爱首页| 亚洲av电影在线观看| 欧美激情综合亚洲一二区| 国产人成午夜免电影观看| 亚洲精品人成网在线播放蜜芽| 欧美黑人成人一区二区三区| 久久精品男人的天堂av天堂| 精品久久久久一区二区| 日本亚洲精品成人欧美一区| 久久九九精品一区二区| 中文字幕亚洲综久久2021| 精品在线一区二区三区| 精品国产乱子伦一区二区三| 欧美精品黄片免费看| 欧洲成人精品在线观看| 欧美精品激情国产在线| 久久天天躁狠狠躁夜夜免费观看| 亚洲免费a视频| 图片区小说区亚洲qvod| 在线精品国内视频秒播| 欧美一区二区不卡视频| 久久精品国产只有精品2020| 一级av一片久久免费观看| 国产亚洲欧美在线视频| 国产精品亚洲国产| 久久五月激情婷婷日韩| 日韩精品在线一区| 国产精品视频一区二区三区w| 亚洲精品91在线| 国产成人鲁鲁免费视频a| 亚洲精品国产精品麻豆9| 国产一级r内射视频| 国产精品福利91| 国产成人麻豆亚洲综合精品| 欧美日韩字幕一区二区| 使劲快高潮了国语对白在线| 亚洲自拍av第一| 久久精品a亚洲国产| 国产天堂在线视频| 亚洲av乱码国产精品色午麻豆h| 亚洲综合日韩欧美| 亚洲黄色中文字幕| 一区不卡在线观看视频| 欧美国产精品va在线观看不卡| 在线成人精品国产区免费| 欧美日韩字幕一区二区| 久久艹伊人| 91中文字幕一区二区| 免费人成视频在线视频| 国产区在线免费观看视频| 人妻少妇久久中中文字幕| 97一级毛片全部免费播放| 久久亚洲私人国产精品va| 亚洲精品福利在线| 亚洲综合区夜久久| 国产又粗又猛又爽又黄的视频99| 日韩精品中文字幕视频| 香蕉精品视频网址| 成人欧美精品一区二区不卡| 香婷婷一区二区精品久久| 亚洲一区久久中文字幕| 91精品自在拍精选久久| 久久国产古代三级毛片视频| 亚州精品日韩在线视频| 无码专区中文字幕无码野| 国产精品视频中文字幕91| 92国产精品午夜福利| 亚洲人妻中文字幕精品一区人妻| 后入人妻精品一区| 99热这里只有精品国产首页不卡| 亚洲国产免费九色| 亚洲国产成人资源在线软件| 亚洲天天做日日做天天欢毛片| 国产小视频在线播放| 精品一区二区免费视频| 国产免费一级精品视频| 国产成人精品久久二区二区91| 欧美在线精品一区二区三区| se久久国产精品| 欧美日韩精品二区视频| 亚洲av有码专区精品一区| 精品夜色国产噜噜亚洲av| 国产精品30页| 99久久精品国产高清一区二区| 亚洲涩涩精品专区| 国产福利一区二区精品秒拍 | 在线亚洲欧美日韩| 日本网站在线免费一区| 国产成人免费片在线视频观看| 精品国产中文在线二区三区四区| 77777亚洲午夜久久多喷| 精品乱伦亚洲中文| 国产精品尤物网在线观看| 亚洲精品香蕉| 日本在线不卡视频| 观看日韩av在线| 久久精品国内偷自一区| 国产成人香蕉久久久久| 国产精品五区在线| 亚洲欧美日韩国产成人| 亚洲国产色婷婷精品综合在线观看 | 国产成人精品aaaa视频一区| 国产成人无码精品久免费| 99热国产成人最新精品| 亚洲乱码中文字幕精品久久| 久久精品国产中国久久| 日韩成人精品影院在线观看| 国产区视频免费观看在线 | 无码精品国产午夜| 中文字幕在线首页av| 麻豆成人午夜福利视频| 亚洲免费在线看| 国产中文久久精品| 黄频美女美女黄频在线网站观看| 99久久免费只要精品国产高潮| 欧美日韩在线一区二区三区 | 亚洲av综合色区一区二区偷拍| 日本一区二区免费高清视频| 精品亚洲视频在线观看| 成人一区欧美| 日韩欧美一区二区三区在线播放| 亚洲aⅴ精品| 日韩欧美专区第一页| 精品二区人妻| 欧美精品一区在线看| 亚洲AV无码国产精品午夜黑丝| 亚洲av成人无码久久精品| 亚洲激情综合婷婷| 超碰中文字幕| av免费观看在线一区二区 | 亚洲天堂诱惑蜜桃av| 久久国产男人天堂| 肥臀熟女一区二区三区| 国产美女精品一区二区三99视频| www久久只有这里有精品| 国产三级国产精品国产普男人 | 日本一区二区三区在线播放| 色婷婷美利坚合众国| 最新av网址国产| 亚洲最大中文字幕| 亚洲香蕉AV在线一区二区三区| 国产亚洲大片免费观看| 久久精品隔壁老王影院| 欧美日韩国产亚洲一区二区三区| 精品一区二区成人在线| 欧美在线观看一区二区| 亚洲狠狠综合婷婷久久图片| 国产婷婷综合在线视频中| 日韩一欧美中文字幕| 中文字幕亚洲乱码熟女1区2区 | 福利av动漫在线观看| 中文字幕AV免费专区| 久久精品午夜一区二区福利| 蜜桃av一区二区三区四区免费| 国产免费一级精品视频| 久久人妻av不卡中文字幕| 欧美精品/日韩精品/国产精品| 亚洲综合色区无码专区| 亚洲国产精品成人在线电影| 日韩精品中文字幕视频一区| 日韩国产一区在线播放| 欧美亚洲综合久久精品| 久久国产亚洲AV无码| 国内免费人妻精品视频在线| www.亚洲欧美日韩| 久久精品国产亚洲av久区| 国产免费无遮挡精品视频| 香港国产三级久久精品三级| 欧美日韩国产区在线观看| 在线欧美中文亚洲精品| av在线不卡免费观看了| 2020国产精品熟女| 亚洲二区日韩精品| 国产91精品亚洲专区在线观看| av天堂亚洲天堂| 欧美日韩一区二区高清视| 国产黑丝高跟在线| 国产午夜视频在线| 99九九久久网站| 欧美在线一区二区三区| 午夜女人a毛片视频| 亚洲欧美视频网站| 国产r级视频在线观看| 久久这里只有精品电国产| 国产麻豆精品免费av| 香蕉伊大在线中字色中文| 国产亚洲aⅴ在线电影| 久久精品国产亚洲精品2020| 国产av最新网址| 欧美另类精品一区视频| 国产午夜视频免费在线观看| 国内外成人在线视频| 欧美日韩中文网站| 婷婷99视频精品全部在线观看| 国产三级精品三级网站| 1769亚洲资源站365在线| 欧美日韩综合精品一区二区| 91精彩视频在线观看| 少妇午夜福利一区二区三区| 日本一区二区三区久久| 色哟哟精品一区二区三区 | 有码亚洲中文字幕| 四虎影永久在线观看精品| 一本色道久久综合五月| 欧美成人精品一区二区三区| 欧美成人一级大片视频| 久久综合国产精品| 日本一区二区视频在线观看| 在线精品亚洲欧美日韩| 日韩精品丝袜第一页| 日韩在线视频一区二区三区 | 亚洲欧美日韩国产精品| 激情五月婷婷中文亚洲综合| 久久只有这才是精品99| 精品99色婷婷| av在线中文亚洲| 久久激情影院| 亚洲欧洲精品视频一区二区三区| 日韩AV在线网址观看| 综合久久一区二区三区| 99热我这里只有精品| 国产精品日韩中文| 欧美日韩国产精品| 国产一区日韩欧美| 精品亚洲国产中文自在线| 亚洲中文日韩欧美视频| 国产亚洲欧美视频在线观看| 欧美日韩亚洲区久久综合| 欧美日韩在线一区二区三区视频| 久久综合无码中文字幕无码| 国产三级精品在线观看| 午夜精品一区二区视频| 国产精品hd在线播放| 亚洲精品成人久久久影院| 有码视频在线中文| 欧美精品亚洲精品日韩已满十八| 综合精品在线| 久久精品天天爽夜夜爽| 日本黄色视频高清不卡| 精品人妻一区二区三区夜夜精品| 亚洲人成网址| 日本一区二区三区精品视频| av网站观看不卡| 亚洲欧洲精品一区| 一本久久a久久精品亚洲| 成人精品一区二区国产在线| 久久国产精品大桥未久av| 老鸭窝日韩一级一区二区| 国产爆初菊一区视频| 亚洲国模精品一区二区| 日韩国产欧美一线| 日韩专区亚洲综合久久| 伊伊人成亚洲综合人网香| 久久亚洲av男人的天堂| 国产精品视频a| 国产高清在线精品一区二区三区 | 亚洲一区二区三区四区在线| 中文片内射在线视频播放| 亚洲欧美色中文字幕| 精品中文字幕在线| 色婷婷在线观看视频| 日韩在线免费观看av网站| 在线麻豆人妻一区二区| 日韩欧美综合视频| 国产一二三区精品| 久久中文字幕综合婷婷| 亚洲av高清一区二区三区尤物| 亚洲毛片精品| av在线不卡播放| 无码伊人久久大蕉中文无码| 模特精品一区二区三区| 亚洲av色婷婷在线观看| 亚洲av日韩av高潮喷| 国产精品免费黄视频| 久久综合九色欧美婷婷98| 亚洲高清中文字幕| 中文精品久久久久中文| 亚洲国产精品免费在线观看| 精品国产综合区久久久久99| 国产永久福利在线视频| 国产一在线精品自产拍| 免费看国产一级特黄aa大片| 综合精品久久婷婷| 日韩一本到亚洲男人的天堂| 国产午夜亚洲精品不卡福利| 青青草99热这里都是精品| 一区二区三区成人在线视频| 精品熟女少妇av免费看| 国产精品99在线观看丝袜美腿| 国产精品99免费视频| 美腿丝袜国产在线| 人妻少妇乱子伦无吗视频专区| 日韩在线视频第一页| 日韩国产欧美一区二区三区在线| 欧美天堂在线| 亚洲国产成人久久三区| 日韩精品电影一区亚洲高清| 国产最新进精品视频| 日本网站在线免费| 制服丝袜在线一区二区三区| 久久一久久综合视频| 国产乱码精品一区二区三区不卡 | 久久影院国产综合| 欧美久久黑人一区二区| 亚洲中文蜜桃av| 在线视频精品99| 亚洲中文字幕av在线一区| 欧美乱妇日本无乱码特黄大片| 成人综合婷婷国产精品久久| 日韩精品一区二区亚洲| 日韩福利免费网站视频在线 | a天堂在线中文网资源| 国产一区在线视频观看| 综合精品久久婷婷| 亚洲精品无线码在线| 国产欧美日本成人在线观看| 国产人成网在线播放VA免费| 国产97在线视频播放| 精品福利视频一区| 国产精品久久av美女十八| 国产精品片AV片在线观看| 中文字幕有码在线| 中国欧美日韩一区二区三区| 国产亚洲欧美在线视频| 亚洲欧洲日韩av综合| 亚洲一区乱码电影在线| 亚洲无码国产精品视频| 婷婷综合国产在线激情| 亚洲欧美制服中文字幕| 久久精品国产免费高清| 国产精品第86页| 亚洲人av在线影院| 国产区在线免费观看视频| 少妇人妻久久综合中文| 美女久久亚洲| 欧亚精品视频一区二区三区| 伊人久久综合网亚洲| 亚洲狠狠婷婷综合久久久图片| 欧美日韩永久久一区二区三区| 精品精品国产欧美在线观看| 超热精品视频在线观看| 日韩欧美福利视频| 国产精品视频流白浆免费视频| 久久国产成人精品一区| 日韩中文字幕在线视频| 亚洲午夜福利片在线| 国产精品二区av| 中文字幕丰满人妻| 亚洲av永久免费网| 国产伦精品一区二区| 欧美日韩一区二区在线视频播放| 国产成人调教在线视频| 日韩人妻无码一区二区三区久久99 | 懂色日韩欧美国产亚洲| 亚洲a级毛片在线看| 国产在线视频专区| 日韩亚洲国产激情在线观看| 国产在线精品毛片| 免费人成视频在线视频| 国产一线二线视频在线观看| 久久毛片免费一区二区三区| 激情啪啪精品一区二区| 国产精品va成人免费播放| 亚洲欧美日韩国产综合麻豆| 国产三级黄片播放| 99久久99久久精品片| 欧美久久亚洲婷婷| 色综合视频一区二区三区| 国产丝袜一区二区三区在线观看| 亚洲综合av中文字幕久久| 2022精品国偷自产免费观看| 免费成年轻人一区二区三区精品视频 | 日韩精品在线观看一区| 欧美精品亚洲精品日韩已满十八 | 亚洲天堂一区二区| 欧美亚洲免费激情综合| 亚洲国产成人区在线| 精品国产亚洲av制服丝袜高跟| 美女被遭到高潮免费网站 | 亚洲成人三级在线| 国产精品伦一区二区三区四季| 国产又黄又猛又色又爽的视频| 中文日韩字幕一区在线观看| 日本a级精品一区二区三区| 天堂最新资源在线| 国产精品网址在线免费观看| 香蕉精品视频网址| 中文字幕不卡一区| 国产精品一区二三区| 在线视频免费中文字幕| 国产精品成人免费视频不卡| 亚洲成人一区二区精品| 国产精品毛片一区二区在线看| 免费的不卡的黄色视频| 国产一区二区视频在线播放 | 国产精品一区成人亚洲片| 久久精品第一区| 亚洲综合色无极久久| 亚洲午夜综合网| 国产人成无码视频在线播放| 亚洲最大成人中文| 国产黄色自拍视频| 国产精品综合色区在线观看| 中文字幕丝袜一区| 亚洲综合在线视频| 国产精品久久二区| 大香伊蕉av在线| 亚洲男人的天堂在线| 国产乱久久亚洲国产精品| 精品国产福利一区在线观看| 99热精品一区| 亚洲日本精品污污污在线| 99re视频在线精品免费播放| 亚洲国产色婷婷精品综合在线观看| 蜜臀aⅴ永久无码一区二区| 亚洲欧美一区三区| 免费在线一区二区三区| 精品一区二区免费成人| 亚洲综合中文字幕天堂网| 午夜国产精品影院在线观看 | 专干老肥熟女视频网站300部| 欧美激情在线二区| 国产黄色在线视频| 激情在线观看不卡视频| 亚洲国产最新在线一区二区| 亚洲国产午夜精品| 久久精品国产欧美a| 日韩美女免费线视频| 免费在线亚洲精品视频| 亚洲国产精品免费在线观看一区| 人成午夜免费大片在线观看| 久久精品青青草原| 日本在线播放一区| 两性色午夜视频3| 亚洲不卡免费视频| 国产a视频精品免费观看| 999精品视频在线观看免费| 免费国产变态久久| 日韩亚洲欧美国产另类| 国产精品无码永久免费888| 精品国产午夜| 97人妻碰碰碰| 日韩午夜影院一区二区三区 | 亚洲中文字幕亚洲综合色在线| 久久亚洲国产精品一区二区| 亚洲天堂国产一区| 久久精品伊人| 欧美熟女成人一区二区| 国产一区二区日韩欧美在线| 一本久久a久久精品免费不| 成年男女人免费看片播放| 亚洲国产极品黄片| 久久综合婷婷| 国产精品4p露脸在线观看| 日韩精品一区二区三区视频| 另类亚洲综合色| 色综合久久综精品| 视频在一区线观看免费| 国产不卡一区二区三区免费视 | 国产精品亚洲综合五月天| 日本免费一区在线观看| 国产精品杨幂va在线观看| 国产美女高潮免费看| 午夜福利电影一区二区在线观看| 热re99国产精品| 中文字幕高清免费不卡视频| 99国产日韩欧美在线观看| 欧美一区二区系列| 亚洲午夜免费视频| 国产白浆喷潮视频在线| 国产激情视频在线观看| 精品人妻少妇一区二| 日本精品久久久久久久久免费| 国产亚洲天堂久久| 国产精品高清一区二区三区| 免费观看国产精品视频的网站 | 国产精品综合导航| 精品视频在线一区二区三区| 在线观看国产一区二区三区99| 亚洲区精品区日韩区综合区| 国产色视频一区二区三区| 欧美日韩在线网站免费观看| 色偷偷久久精品| 80在线观看国产一区二区| 中文字幕亚洲综合久久| 日本阿v精品视频在线观看| 日韩AV在线网址观看| 亚洲欧美日韩精品永久在线| 亚洲区日韩精品| 亚洲成人一区二区精品| 亚洲天堂精品网| 成人精品人妻一区二区| 中文字幕不卡一区| 国产区二区三区在线观看| 亚洲一区二区久久久| 国产精品视频第一区二区| 欧美日韩亚洲综合激情| 欧美视频在线观看不卡一区| 久久国产精品夜色| 国产精品久久久久久影视| 人妻少妇中文久久| 亚洲第一天堂无码专区| 一本精品视频中文字幕| 国产乱人伦偷精品海角视频海角| 美女三级国产精品| 国产亚洲人成网站观看| 亚洲综合国产精品| 国产日韩欧美亚洲二区| 欧美精品中文字幕亚洲综合| 亚洲一区二区三区高清网| 国产成人三级欧美在线| 亚洲AV成人无码日韩久久精品 | 欧美日韩亚洲不卡| 亚洲精品456| 不卡av在线播放| 亚洲AV无码乱码国产网站| 久久精品人 五月丁香婷婷综合网| 波多野结衣视频在线一区二区| 亚洲一区欧美激情| 亚洲欧美激情小说另类| 亚洲精品免费在线观看视频网站| 亚洲产国偷自拍| 国产欧美日韩综合精品一区二区 | 亚洲熟妇自偷自拍另类图片站| 91久久国产综合精品| 亚洲精国产一区二区三区| 亚洲av毛片免费在线观看| 在线观看精品国产三级| 热99re久久精品2久久久| 国产精品女同性系列| 国产成人高清精品亚洲一区| 91av在线视频观看| 最新国语自产精品视频在| 免费观看黄色a一级毛片| 美腿丝袜国产在线| 国产精品一区二区免费视频 | 日韩国产成人精品视频人| 国产美女午夜福利久久| 在线观看精品国产入口| 亚洲高清中文无码| 欧美日韩在线观看一区二区| 色综合欧美色综合七久久| 91av中文字幕在线免费观看| 26蜜桃精品在线视频| 日韩永久免费视频| 国产三级一区| 久久天天躁狠狠躁夜夜爽| 国产九九视频一区二区三区| 久久中文人妻字幕| 日韩尤物在线播放| 久久精品国产亚洲AV午夜| 韩国精品一区二区久久| 国产综合色精品一区二区三区 | 欧美性一交激情视频在线| 日韩人妻一区二区三区在线视频| 国产色婷婷av| 亚洲欧美午夜| 91密臀精品国产自偷在线| 日韩欧美国产成人| 韩国女主播一区二区视频| 91中文字幕资源网| 精品视频福利专区在线| 欧美激情视频网址二区三区| 亚洲欧美日韩偷| 欧美亚洲国产精品久久蜜看片| 日本精品不卡在线观看AⅤ| 欧美精品一区二区三区在线播放| 91精品电影网午夜鲁丝片| 久久久久国产亚洲日本| 亚洲中文字幕三级在线观看| 色婷婷伊人亚洲| 免费成年轻人一区二区三区精品视频| 人妻少妇乱子伦无吗视频专区 | 成人自拍网| 中文字幕日韩专区| 精品欧美一区二区三区久久久| 欧美精品亚洲二区| 网站欧美在线你懂| 国产精品福利一区二区| 欧美精品一区在线看| 六月婷婷网视频在线观看| 国产精品乱码一区二区三区不卡| 亚洲自拍一区视频| 少妇一级毛片免费高清特黄免| 国产精品亚洲三级| 国产毛片一区二区三区久久| 在线观看亚洲欧美日本专区| 欧美中文字幕亚洲精品| 国产精品不卡视频一区二区| 国产一区二区三区免费不卡视频| 国产一级粉嫩在线观看| 久久精品人妻中出| 亚洲国语精品自产拍在线观看 | 国产精品亚洲欧美日韩一区在线| 国产精品亚洲二区在线| 国产成人欧美一区二区三区的 | 91精品一区二区三区在线观看| 福利在线一区二区| 日韩欧美在线一级一中文字暮| 婷婷综合在线观看丁香| 在线精品国产一区二区| 高清国产性色视频在线| 久久成人国产精品| 亚洲人妻在线视频| 亚洲一欧洲中文字幕在线| 91亚洲国产成人久久精品| 日韩在线国产亚洲| 精品国产乱码一区二区三区四区| 亚洲欧洲日韩在线| 日韩在线视频免费看| 亚洲欧美色中文字幕| 在线看人成视频免费| 精品久久国产影视| 国产极品嫩嫩免费观看| 丁香六月婷婷综合在线观看| 91久久国产综合精品女同国语| 欧美综合精品一区二区三区| 欧美激情亚洲一区中文字幕| 久久免费视频网| 亚洲福利秒拍一区二区| 在线精品91av电影| 亚洲国产精品综合在线小说| 国产精品高清在线看| 日韩中文字幕一区在线| 精品免费国产视频视频| 国产婷婷丁香久久综合| 久久精品一区二区免费看| 国产乱人伦无无码视频试看 | 91精品国产九色| 国产二区视频在线观看不卡| 国内精品伊人久久久久AV影院| 亚洲精品第一国产综合精品5| 99热这里只有精品国产首页| 亚洲av丰满熟妇一区| 午夜精品久久久久| 日本成年一区久久综合| 日韩欧美亚洲国产| 欧美午夜精品子伦| 国产精品福利久久电影| 亚洲伊人色欲综合网| 中文字幕人成不卡一区| 亚洲午夜久久久精品电影院| 精品日韩手机在线视频| 免费一级毛片在线播放视频老| 一级片在线观看91| 亚洲国产精品久久| 国产成人在线免费| 四虎精品国产精品成人| 精品国内视频| 午夜福利av大色大全| 成人午夜免费在线观看| 日本久久免费精品国产| yy亚洲人成电影网站色| 91久久香蕉国产熟女看| 国内精品视频一区二区三区| 精品人妻一区二区三区视频不卡 | 国产美女白嫩嫩在线观看| 精品夜恋影院亚洲欧洲| 国产精品久久久久久一级毛片 | 一级做性色a爰片久久毛片免费| 久久99热这里只有精品高清| 久精品人妻少妇| 欧洲日韩av网站| 亚洲日韩精品欧美一区二区一| 国产视频99| 欧美精品啪啪一区二区三区| 性久久精品视频免费| 91国偷自产一区二区三区精品| aaa一级最新毛片| 亚洲精品视频免费| 国产免费av一级在线观看不卡| 亚洲黄色av电影一区二区| 精品视频一区二区三区四区| 婷婷综合国产在线激情| 日韩全色在线视频| 色婷婷视频在线观看| 亚洲国产午夜成人福利AV| 丁香婷婷激情网| 亚洲av日韩综合区| 国内精品一区二区三区香蕉| 三级自拍亚洲无码| av中文字幕天堂网| 99国产成+人+综合+亚洲欧美| 国产精品色在线看| 国产精品专区免费视频| 国产麻豆精品一区二区| 亚洲中文字幕精品久久久| 国产综合精品亚洲777| 久久91精品牛牛| 亚洲欧美制服丝袜另类中文| 国内精品伊人久久影院| 亚洲一二三在线| 国产精品欧美成人片| 亚洲天堂网av网站| 国产乱人伦无无码视频试看| 日韩免费精品毛片一区二区三区| 无遮挡免费av片在线观看| 视频二区中文字幕| 国产一区二区欧美日韩| 亚洲欧美国产精品综合一区| 亚洲欧美中文字幕专区| 国产日韩av高清在线观看| 人人人妻人人澡人人爽欧美一区| 国产在线一二三精品观看| 国产精品一区欧美激情| 99精品免费欧美成人小视频| 日本视频一区在线| 亚洲国产欧美二区| 欧美日韩一区二区成人| 亚洲婷婷影院| 国产成人网在线免费观看| 美日韩一区二区三区| 亚洲精品第一综合99久久| 国模一区二区三区四区视频| 国产精品无码d∨d在线观看| 亚洲伦在线观看| 成人全黄三级视频在线观看| 国产精品白浆在线观看| 在线播放一区二区三区| 国产亚洲精品欧美日韩| 亚洲国产成人91精品| 亚洲精品99久久久久中文字幕| 国产精品极品美女在线观看| 日韩激情欧美一区二区| 亚洲精品在线专区| 亚洲欧美日韩国产成人精品| 中文字幕在线观看亚洲免费| 无码中文字幕无码专区| 人妻在线系列一区二区三| 免费一区二区三区毛片10分钟| 国产精品久久美女流白浆| 日日拍夜夜操| 国产精品久久9| 国产精品自在在线香蕉| 视频一区精品中文字幕| 国产成a人片在线观看视频| 亚洲|欧美|日本在线观看| 精品久久一区二区| 老司机福利在线视频观看| 久久免费视频网| 在线精品亚洲欧美日韩| 亚洲精品专区| 中文字幕久久边人妻| 精品一区二区国产日韩| 人人爽人人妻人人爱精品视频| 精品一区在线观看视频| 亚洲精品91在线| 不卡无码国产| 中国成人免费视频| av网站观看不卡| 日本h在线亚洲网站在线观看| 亚洲一区精品日韩欧美| 亚洲欧美制服专区| 国产亚洲高清在线精品不卡| 亚洲AV无码秘 蜜桃1区| 日韩欧美一区二区不卡| 久久香蕉国产国精品一区| 欧美精品成人一区二区| 成人免费网站麻豆| 国产欧美另类久久| 国产精品高清一区二区三区| 欧美日韩激情精品一区1页| 在线观看精品国产尤物| 成人黄色小视频| 亚洲高清在线中文字幕| 亚洲qingse中文在线| 亚洲字幕av在线| 久草精品在线观看| 国产成a人片在线观看视频| 亚洲国产精品系列的观看 | 日本欧美乱色视频| 国产人成无码视频在线播放| 久久国产精品ww| 亚洲成a在线观看| 国产在线91精品入口| 国产精品视频内| 蜜桃久久精品| 人妻精品综合久久久久| 亚洲国产精品成人综合色在线婷婷| 日韩av中文字幕第一页乱码| 国产精品九九九无码喷水| 高清日韩av在线播放| 亚洲欧美中文精品久久久久 | 亚洲精品国产专区在线观看| 日韩欧美专区第一页| 99久久综合| 亚洲成a人片在线一区二区| 亚洲人成在线网站观看| 国产精品无码无卡有毛在线播放| 国产日韩欧美一区二区三区在线| 人妻久久精品一区二区| 国产精品欧美日本在线观看| 欧美另类久久久精品| 99久久婷婷国产自综合青草| 在线播放av不卡国产日韩| 一级欧美日韩| 国产伦精品一区二区| 国产美女视频片| 亚洲精品免费播放| 综合久久91| 91欧美精品激情在线观看| 亚洲综合网在线观看视频| 在线播放亚洲精品| 日韩在线视频免费不卡一区| 国产精品久久久久久影院 | 国产亚洲欧美日韩在线观看不卡 | 欧美夜色成人| 亚洲超欲av在线| 97免费在线视频| 久久99精品久久久久久综合| 99热免费这里只有精品| 中文字幕精品入口| 精品视频二区三区| 免费精品国产自产拍观看| 国产精品视频久久久久久| av在线香蕉在线| 国产精品免费黄视频| 中文字幕人妻出轨一区二区| 欧美自拍偷拍| 精品一区二区三区在线观看| 亚洲成人女毛片| 91av在线观看免费网站| 日韩欧美在线综合网另类| 午夜国产无码片| av中文在线观看| 国产一区二区精品久久| 国产在线观看内射黄色| 国产不卡一区二区三区在线| 午夜国产精品大片| 国产精品午夜福利麻豆| 91在线精品老司机免费播放| 中国无码在线播放| 日韩久久精品| 日韩欧美亚洲综合久久99e| 永久免费视频国产极品在线| 欧美色综合二区| 国产欧美日韩精品一二| 亚洲精品永久黄色视频| 精品高清无码视频| 国产自在自线午夜精品视频在| 久久国产精品一区二区| 91久久精品一区二区| 国产av福利久久| 精品亚洲国产一区在线| 99久只有这里精品| 99在线精选观看视频一区二区三区 | 日本在线一区二区| 亚洲国产美女精品久久久久 | 国产午夜精品久久久久| 青青国产在线拍| 欧美成人伊人久久综合网| 国产欧美一区二区三区在线| av女优亚洲天堂亚洲区| 第一亚洲av| 日韩一区二区三区免费在线看片| 免费看国产永久黄色官网视频| 日韩欧美国产另类在线| 在线观看国产免费网站av| 天堂中文8资源在线8| 91亚洲成人福利| 国产主播在线一区| av无码午夜福利一区二区三区| 中文乱码日韩欧美| 青青草原亚洲一区二区| 日韩一欧美内射在线观看| 久久精品国产亚洲7777小说| 亚洲va在线va天堂va四虎| 欧美视频一区二区三区四区| 亚洲成人福利在线观看| 高清无码不卡免费视频| 青青国产在线拍| 欧美精品中文字幕亚洲专区| 久久福利免费视频| 欧美视频一区在线| 中文字幕无码视频在线第一页| 亚洲欧洲日本精品| 国产av一区二区麻豆| 91av在线视频观看| 久久久久国产精品午夜一区| 无码人妻中文字幕精品专区| 精品久久午夜| 国产精品hd在线播放| 久久国产热这里只有精品| 精品无码一区二区三区色噜噜| 国精品无码一区二区三区久久Hv| 亚洲人成在线网站观看| 91成人精品国产一区| 极品人妻少妇av免费久久| 亚洲av全集久久| 少妇性网人妻视频一区二区| 欧美日韩国产三级久久| 国产伦精品一区二区三区在线观看| 国产亚洲欧美日本一二三本道 | 亚洲区日韩精品| 婷婷亚洲网站| 久久亚洲中文| 一区二区三区四区精品视频| 国产成人精品三级在线| 性网站在线观看| 欧美成人精品不卡在线观看| 国产欧美日韩亚洲日本在线| 天天综合视频网| 精品中文字幕免费专区| 亚洲美国产亚洲av| 久久亚洲系列国产综合| 欧美日产欧美日产精品| 精品一区二区久久| 国产精品高清视亚洲乱码| 久久久久亚洲AV无码麻豆 | 99久久精品国产国产毛片小说| 91精品一区二区三区在线播放| 免费国产高清精品一区在线| 久久精品国内偷自一区 | 欧美视频第一页在线播放| 国产ww在线观看| 国产小视频在线观看免费| 国产欧美日韩不卡| 欧美精品啪啪一区二区三区| 国产亚洲精品中文带字幕21页| 欧美国产日韩亚洲综合| 欧美精品黄片免费看| 欧美国产日韩一区二区三区| 91久久精品国产一区二区| 亚洲欧美综合成人| 国产美女久久久久不卡| 欧美va亚洲va国产| 日韩久久亚洲区| 精品91一区二区三区| 欧美日韩精品综合在线一区| 亚洲欧美精品一区二区日黑人| 国产在线一二三精品观看| 高潮喷水在线观看一区| 国产精品日产三级在线观看 | 精品国产专区91在线app| 国产亚洲第一伦理第一区| 亚洲精品国产精品乱码99| 奇米狠狠色| 丝袜制服诱惑一区二区三区| 国产伦精品一区二区| 久久精品亚洲热综合一本奇米| 国产日韩欧美综合| 日韩av网站在线看| 国产玖玖玖精品视频| 国内大量揄拍18人妻精品视频| 92国产精品午夜福利| 久久国产精品72福利| 人妻毛片一级毛片免费看| 欧美日韩国产区在线观看| 日韩精品成人| 欧美日韩国产精品免费在线观看| 欧美日韩高清精品在线| 99久久精品国产综合一区| 夜夜嗨视频福利写真精品网| 国产精品久久99久久| 亚洲国产欧美一区二区欧美| 激情综合网五月| 日韩一级视频| 欧美色视频综合在线观看| 国产欧美日韩综合二区三区| 欧美日韩三级亚洲欧美精品| 欧美亚洲国产成| 国产综合久久久久久鬼色| 国产毛片不卡野外视频 | 久久精品国产第一区二区| 亚洲一区日韩高清中文字幕亚洲| 亚洲然后久久精品中文字幕| 不卡一区二区三区在线视频| 日韩国产一区| 亚洲欧美日韩国产清纯在线观看| 一区二区精品视频国产| 91超碰免费版观看| 国语对白一区二区三区| 国产乱妇在线| 精品在线一区| 国产精品一区二区不卡顿| 亚洲丁香色婷婷综合欲色啪 | 91亚洲成人福利| 人妻中文字幕一区不卡| 99午夜高清在线视频在观看| 国产日韩欧美黄色片免费观看| 波多野结衣的av一区二区三区在线 | 免费观看国产精品视频| 在线观看h精品亚洲国产| 国产精品视频1区2区3区不卡| 欧美一级成人一区二区三区| 亚洲国产精品黄色片| 国产激情熟女| 四虎影永久在线观看精品| 乱码一区二区三区在线观看国产| 亚洲伊人色欲综合网| 中文字幕综合一区| 午夜福利av片| 欧美亚洲一区二区三区导航| 国产精品一级av在线播放| 在线亚洲+欧美+日本专区| 中文字幕日韩精品互動交流| 中文字幕久久边人妻| 亚洲综合极品香蕉久久网| 久久精品国产三级伦理电影| 久久国产欧美日韩精品| 成人久久精品免费观看| 久久亚洲国产成人精品性色| 欧美日本激情在线| 伊人久久大香线蕉综合收藏| 国内精品熟女亚洲精品熟女| 亚洲精品电影国产| 国产激情一区二区三区在线观看| 国产毛片一区二区三区aaa| 欧美日韩无线在码不卡一区二区三区 | 国产福利一区二区精品秒拍| 午夜av一区二区三区在线观看| 久久综合婷婷| av免费观看精品一区二区| 国产精品视频免费视频| 国产日韩欧美高清一区精品| 日韩国产欧美在线观看一区二区 | 亚洲av专区在线电影成人av片| 亚洲欧美日韩国产专区| 国产精品女人视频一区二区三区| 亚洲综合激情另类专区| 欧美日韩国产亚洲二区| 亚洲欧美日韩国产专区| 亚洲精品在线观看国产| 日韩精品在线观看一区| 免费黄色视频永久观看| 亚洲国产精品免费进入观看| 女人精品天堂| 国产福利激情视频| 亚洲国产精品成人综合色在线婷婷| 国产男生午夜福利免费网站 | 亚洲欧美日韩高清专区一区| 国产在线91在线电影| 国产精品国产精品国产专区不卡| 欧美国产精品va在线观看不卡| 久久亚洲人成国产精品| av自拍亚洲国产| 亚洲qingse中文在线| 亚洲av乱码一区二区三区夜夜| 国产日韩亚洲欧美| 99热伊人久久| 日本精品a在线观看| 国产在线观看成人| 午夜国产视频福利| 一本大道香蕉高清久久| 国产不卡免费69av| 精品无码久久久久国产一区二区| 国产盗摄精品一区二区三区| 中文一级毛片| 日韩精品专区AV无码| 少妇无遮挡十八禁网站| 国产成人精品福利网站在线观看 | 自拍偷自拍亚洲一区二区| 免费人成在线观看网站| 久久激情视频大片免费观看| 在线观看中文精品无码| 国产精品永久免费视频| 成人久久午夜熟妇| 中文日韩免费码中文在线观看| 久久亚洲三级| 日韩每日在线免费更新观看av| 色婷婷亚洲精品综合影院| 亚洲欧美日韩国产成人| 精品国产理论片在线观看| 国产精品视频福利一区二区| 国产黄色一级在线观看| 97久久超碰精品高清国产| 免费国产成人高清在线观看视频| 国产三级a三级精品| 久久国产古代三级毛片视频| 精品国产免费一区二区三区香蕉| 少妇人妻精品一区二区三区视频| 国产精品香蕉成人网在线观看| 国产理论精品三级| 性欧美一区二区三区在线| 国产1024在线永久免费观看| 日韩av在线最新| 欧美亚洲高清在线| 亚洲欧美国产码专区在线观看| 亚洲a级免费毛片| 国产精品免费黄视频| 538国产精品视频一区二区 | 国内免费视频成人精品| 亚洲欧美精品日韩二| 国产精品久久久免费视频| 91嫩草国产线免费观看| av在线播放一区二区| 国产精品毛片一区| 少妇内射高潮福利炮| 国产成人欧美一区二区三区vr| 97久久超碰成人精品网站| 亚洲精品在线不卡| 欧美日韩在线观看一区二区| 国产九九视频一区二区三区| av在线中文亚洲| 国产精品亚洲αv三区| 99精品在线播放| 国产精品嫩草69影院| 亚洲中文字幕av电影在线| 久久精品夜色国产| 草草影院一级毛片a级| 久久麻豆精亚洲av品国产拍拍| 久久精品66免费99精品| 亚洲精品人中文字幕高潮| 99久久精品视香蕉蕉er热资源| 人妻系列中文字幕有码专区| 午夜激情视频一区二区麻豆| 亚洲第一天堂无码专区| 在线麻豆精品亚洲一区二区| 国产三级国产精品| 精品国产av一区二区三区6| 久久精品国产三级伦理电影| 精品一区二区免费成人| 久久精品国产精品国产精品污| 日韩视频一区二区| 欧美亚洲成人va| 免费观看国产在线不卡av| 国产ā片在线观看免费观看| 亚洲精品国产精品国自产观看| 97视频免费在线| 99久久精品国产精品一区| 99re在线都是精品视频| 国产日韩一区二区三区在线观看| 精品人妻aV中文字幕乱码| 最新国产精品自在线观看| 色婷婷综合和线在线| 中文字幕人妻丝袜乱一区二区| 亚洲熟妇熟女久久精品一区| 亚洲免费精品aⅴ国产| 日韩精品内射视频免费观看| 久久综合久久综合久久综合| 模特精品一区二区三区| 久久亚洲系列国产综合| 一区二片av在线| av天堂久久最新| 亚洲综合久久一区二区三区| 中文字幕久久精品一区二区三区| 亚洲精品综合久久| 一区二区不卡视频| 欧美日韩国产区在线观看| 亚洲欧美日韩精品中文乱码| 久久99人妻免费精品一区| 欧美日本国产视频| 亚洲中文字幕资源在线观看| 99pao久久免费精品视香蕉蕉| 久久久国产精品一区二区三区| 欧美超碰精品在线| 婷婷久久综合九色综合98| 国产v综合v亚洲欧美| 日韩国产欧美在线观看一区二区| 91在线视频欧美日韩| 成人一区二区精品在线观看| 亚洲av网站网址免费观看| 在线播放欧美日韩国产| 亚洲中文在线字幕a| 亚洲AV永久无码精品无码直播 | 丁香六月色婷婷综合网| 国产精久久一区二区三区| 国产精品久久一区二区三区| 在线亚洲+欧美+日本专区| 日本在线不卡视频| 国产精品久久久久久搜索| 中文字幕欧美日韩专区| 欧美在线亚洲专区| 日本欧美日韩一区| 热国产热有码| 一级淫片毛片| 亚洲字幕av在线| 国产av白丝娇喘小仙女| 国产精品熟女丝袜一区二区三区 | 99re视频精品全部免费| 亚洲国语自产一区第二页| 国产精品岛国久久久久| 成人久久精品免费观看| 潮喷在线无码白浆| 色噜噜国产99性色内射| h国产视频| 国产美女精品视频免费播放| 精品国产1区2区在线观看| 亚洲精品成人中文网| 亚洲国产一区二区乱码日韩欧美 | 在线综合亚洲欧美网站| 亚洲国产精品一区二区久久| 欧美日韩国产中文| 国产精品www在线无码| 国产精品久片在线观看| 91久久婷婷国产综合精品| 亚洲天堂婷婷五月丁香久久| 538在线啪在线观看| 国内精品伊人久久久久AV影院| 日韩精品电影一区二区| 国产野外日b视频在线观看| 成人午夜视频网址| 国产综合精品亚洲777| 极品尤物在线精品一区二区三区| 亚洲熟女少妇av| a级毛片免费不卡视频播放 | 亚洲国产乱码| 亚洲欧洲国产av码| 亚洲综合另类色区| 在线永久免费av网站| 99久久这里只有精品6| 永久免费视频国产极品在线| 麻豆国产精品久久天堂| 在线观看国产一区二区三区99| 亚洲国产精品热久久| 99ri国产精品| 国产激情A∨在线视频播放| 国产成人亚洲精品青草直播| 午夜国产精品视频| 国产一区二区三区草草影院| 国产男女超爽视频在线观看| 中文字幕高清av在线| 亚洲欧美日韩一区免费| 欧美一区二区三区高清视频| 国产欧美性综合视频性刺激| 国产精品久久久久久久久| 亚洲熟妇成人精品一区| 性xxxx视频播放免费| 亚洲国产成人综合在线| 91福利视频中文字幕| 日韩精品中文字幕一区三区 | 国产成人啪精品视频免费网站下载| 日韩欧美福利视频| 精品亚洲国产一在线观看| 中文字幕2019精品99视频| 午夜在线观看一区二区| 亚洲精选日韩在线| 2020最新日韩中文字幕亚洲 | 丝袜喷水在线| 日韩一区二区不卡| 久久精品国产日韩不卡| 亚洲国产精品成人午夜在线观看 | 一本色道久久88一综合免费| 男人的天堂亚洲aⅴ在线| 亚洲欧美日韩精品一区| 久久精品亚洲欧美日韩久久| 国产精品亚洲Ⅴa在线观看| 视频在一区线观看免费| 亚洲字幕91| 国产线视频精品免费观看视频| 无码免费在线视频| 人成年免费视频一区二区 | 被侵犯内射的人妻中文字幕| 国产视频一区二区三区在线免费看 | 99草在线观看| 青青人亚洲AV永久无码精品无| 熟女亚洲av综合av| 亚洲伊人久久综合精品| 亚洲欧美日韩精品专区52| 中文字幕成人精品久久不卡91| 国产在线对白视频| 成人av第二区精品| 手机看片国产欧美日韩高清 | 欧美日韩精品国产一区二区| 亚洲精品免费观看| 中文字幕人成乱码熟女免费| 亚洲国产av韩国乱线| 亚洲午夜片子大全精品| 欧美国产日韩成人在线播放| 性欧美一区二区三区在线| 国产视频一区二区美女| 精品亚洲一区二区| 亚洲无码一区视频| 国产免费自产拍在线观看 | 夜夜爽亚洲一级精品国产蜜臀av| 国产精品福利久久2020| 久久六月丁香婷婷婷| 亚洲鲁丝片AV无码多人| 亚洲免费av观看网址| 欧洲一级做a爱在线观看| 亚洲精品视频播放| 久热中文在线观看精品视频 | 久久免费精品| 国产福利激情视频| 精品se在线亚洲欧美org| 麻豆精品视频在线观看| 92国产精品午夜福利| 国产一区三级在线观看| 婷婷六月久久综合丁香可观看| 精品国产自在久久成人| 欧美日韩成人三区| 99热精品一区| 国产AV日韩AV天堂久久| 亚洲成av人免费观看| 欧美一区二区三区激情视频| 国产在线拍揄自揄视频无码yw| 国产精品一区二区三区aaaa| 日本欧美国产精品第一页久久| 东京热无码国产精品| 国产97色在线/日韩人人| 国产福利专区精品视频| 欧美日韩在线观看视频一区| 婷婷久久五月综合色国产| 日韩AV无码免费| 日本高清视频在线播放一区| 成人综合在线视频| 国产美女被爽到高潮视频| 成人免费视频一区二区三区| 97成人精品视频在线观看| 日本韩国欧美国产在线视频| 国产成人精品三级在线| 国产亚洲一区二区在线| 99久热精品免费观看四虎| 亚洲国产精品无码中文字满| 午夜福利视频亚洲一区二区| 欧美日本一区亚洲欧美一区| 国产综合欧美日韩视频一区| 精品国产三级99久久| 狠狠色丁香久久婷婷| 精品中文字幕免费专区| 欧美午夜精品| 亚洲AV永久无码精品国产精| 成人午夜网站在线观看视频| 国产亚洲日韩AV在线播放不卡| 久久se这里有精品| a级午夜毛片免费一区二区| 人妻人伦精品一区二区网站| 国产一区二区视频在线观看| 国产成人精品A视频| 亚洲国产精品免费在线观看一区| 免费人成又黄又爽的视频在线| 午夜电影精品| 欧美日韩国产在线人| 每日在线观看亚洲av| 一级做性色a爰片久久毛片免费| 国产大屁股视频免费区| 国产欧美久久一区二区| 久久亚洲精品国产精品小说| 久久毛片免费一区二区三区| 四虎国产精品一区二区| 亚洲国产精品免费在线观看一区 | 亚洲国产成人高清视频| 亚洲精品日本二区三区电影| 久久精品国产一区二区三区| 99久久这里只有精品免费 | 99久久精品国产国产毛片小说| 亚洲欧美丝袜综合精品第一页| 国产亚洲精品a在线观看中文| 欧美激情国产精品日韩一区| 免费人成视频在线观看播放国产| 欧美激情中文字幕综合一区| 亚洲av成人在线网站| 久久精品亚洲成在人线av网址| a一片大全在线观看| 欧美精品成人一区二区| 欧美日韩一区二区a∨视频| 精品视频人妻少妇一区二区三区 | 国产精品久久电影网| 色老久久精品偷偷鲁一区| 精品一区二区影院| 日韩经典欧美精品一区| 亚洲成人av免费在线观看| 久久综合色之久久综合| 亚洲天堂av日韩天堂av| 国产高清精品在线91| 亚洲一区国产欧美| 欧美日韩在线成人| 亚洲欧美日韩精品专区| 亚洲国产精品女主播在线观看| 女人18毛片水真多国产| 亚洲男人天堂最新| 亚洲精品欧美日韩| 国产精品久久久久久久成人午夜| 久久国产精品免费观看| 手机看片国产欧美日韩高清| 18国产精品福利片免费看| 午夜视频在线观看完整版| 欧美人成黄网站色视频| 亚洲中文字幕精品在线视频| 精品视频一区二区三区免费 | 国产午夜精品在线播放| 亚洲成人毛片网站| 久久天天躁狠狠躁夜夜免费观看| 久久99热这里只有精品免费看 | 国产综合激情在线亚洲第一页| 亚洲欧美日韩国产精品| 老司机午夜福利视频一区| 国产一区二区精品在线观看| 国产欧美一区二区精品性色直播| 亚洲AV久播在线播放青青尤物电| 欧洲一区二区三区在线观看| 一区不卡在线观看视频| 欧美一区二区在线观看免费网站| 欧美少妇乱码| 久久国产精品免费观看| 日韩美女免费线视频| 久久精品国产老熟女| 国产精品无码久久久一区蜜臀| 青青热在线精品视频免费| 精品不卡视频在线播放| 中文字幕日韩专区| 国产欧美在线观看精品一区二区 | 一本色道久久综合一区| 亚洲欧美日韩久久中文字幕| mm1313亚洲精品国产| 久久精品国产99国产精品| 毛片在线播放亚洲免费中文网| 日韩在线视频免费看| 久久婷婷国产综合尤物精品| 亚洲成年av片在线观看| 久久精品66免费99精品| 久久久久国产熟女精品| 日本欧洲亚洲一区在线观看| 亚洲欧美精品日韩二| 亚洲欧美制服中文字幕| 亚洲成人福利在线观看| 亚洲精品国产熟女久久| 色偷偷综合亚洲av78| 亚洲AV无码国产精品午夜黑丝| 国产欧美精品区一区二区三区| 日韩精品中文字幕视频| 欧美激情一区二区三区不卡| 色爱无码A V 综合区| 亚洲精品国产va| av免费观看精品一区二区| 国产精品综合久久久| 99久久精品免费看国产高清| 欧美激情在线视频日本|