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

Using GCC’s C++ Compiler

(peakflys注:講述Gcc的一些歷程和嘗試,本文轉(zhuǎn)自http://blog.chinaunix.net/uid-20361370-id-1962882.html)
   本文討論GNU編譯器集合(GCC)中的C++編譯器(g++)的典型用法,主要是指命令行選項的構(gòu)造。GCC的C++編譯器正常安裝后,可以使用g++或c++命令執(zhí)行。
GCC Option Refresher
本節(jié)回顧GCC的C編譯器的基本使用方法。
g++編譯器的選項可以是單字符,比如-o,也可以多字符,比如-ansi。所以你不可以把多個單字符選項合寫到一起,這和許多其他GNU和UNIX下的程序不同。例如,多字符選項-pg不表示2個單字符選項-p -g。選項-pg表示在最終的2進(jìn)制文件里生成額外的代碼,用來輸出GNU code profiler的信息gprof;而選項-p -g則表示在目標(biāo)2進(jìn)制文件里生成額外的代碼,用來產(chǎn)生prof code profiler需要的信息(-p),并在目標(biāo)里加入調(diào)試信息(-g)。
既然g++把多字符的選項進(jìn)行了區(qū)分,你就可以隨意安排各個選項的順序了。比如:
g++ -pg -fno-strength-reduce -g myprog.c -o myprog
g++ myprog.c -o myprog -g -fno-strength-reduce -pg
是一樣的。
一般情況下,這些選項的順序是無所謂的。但是在有些情況下,順序會變得重要,比如你多次使用同一類的選項。舉個例子,-I選項指定了搜索include文件的目錄,如果你用-I指定了多個目錄,gcc會按照你指定目錄的順序搜索需要的文件。
用g++編譯單個源文件myprog.cc很簡單,只要把文件名當(dāng)參數(shù)傳給g++就行了。
$ g++ myprog.cc
$ ls -l
-rwxr-xr-x 1 wvh users 13644 Oct 5 16:17 a.out
-rw-r--r-- 1 wvh users 220 Oct 5 16:17 myprog.cc
默認(rèn)情況下,UNIX和LINUX操作系統(tǒng)生成的目標(biāo)文件是當(dāng)前目錄下的a.out,只要輸入./a.out就可以執(zhí)行。在Cygwin系統(tǒng)下,你得到的是a.exe,通過輸入./a或者./a.exe都可以執(zhí)行。
要定義g++的輸出文件名,使用-o選項如下所示:
$ g++ myprog.cc -o runme
$ ls -l
-rw-r--r-- 1 wvh users 220 Oct 5 16:17 myprog.cc
-rwxr-xr-x 1 wvh users 13644 Oct 5 16:28 runme
如果編譯多個源文件,只要在命令行里列出它們就行了,如下所示,最終產(chǎn)生的輸出文件是showdate:
$ g++ showdate.cc helper.cc –o showdate
如果你想先編譯這些源文件,最后再把它們鏈接成一個2進(jìn)制文件,可以用-c選項,那么g++就只產(chǎn)生object文件,如下所示:
$ g++ -c showdate.cc
$ g++ -c helper.cc
$ g++ showdate.o helper.o –o showdate
$ ls -l
total 124
-rw-r--r-- 1 wvh users 210 Oct 5 12:42 helper.cc
-rw-r--r-- 1 wvh users 45 Oct 5 12:29 helper.h
-rw-r--r-- 1 wvh users 1104 Oct 5 13:50 helper.o
-rwxr-xr-x 1 wvh users 13891 Oct 5 13:51 showdate
-rw-r--r-- 1 wvh users 208 Oct 5 12:44 showdate.cc
-rw-r--r-- 1 wvh users 1008 Oct 5 13:50 showdate.o
注意
所有的GCC編譯器都是通過文件的后綴名來判斷文件類型的,然后選擇應(yīng)該進(jìn)行的操作(比如,后綴名為.o的文件只需要進(jìn)行鏈接),文件類型到操作的映射記錄在GCC的specs文件里。在GCC版本4以前,specs文件是標(biāo)準(zhǔn)文本文件,可以用任何文本編輯器修改;但是GCC版本4以后specs文件是內(nèi)建文件,必須要進(jìn)行解壓才能修改。
很顯然,當(dāng)你的項目文件稍微多點,使用命令行來編譯就不可接受了,特別是還要加上搜索目錄、優(yōu)化選項和其他g++選項。解決的方案就是make,不過本文并不討論它。
C++源文件擴展名
前面說過所有GCC編譯器都通過文件后綴名來決定采用的操作。下表列出了g++認(rèn)識的文件類型和相應(yīng)的操作。
Suffix     Operation
.C         C++ source code to preprocess.
.cc        C++ source code to preprocess. This is the standard extension for C++ source files.
.cpp       C++ source code to preprocess.
.cxx       C++ source code to preprocess
.ii        C++ source code not to preprocess.
如果一個文件的后綴名未知,那么就當(dāng)成object文件進(jìn)行鏈接。這并不是說你只能使用上表列出的文件名后綴來區(qū)分源代碼文件和其他文件,你可以用-x lang選項指定一個或多個輸入文件的代碼類型,不使用標(biāo)準(zhǔn)的文件名后綴規(guī)則。lang參數(shù)指定代碼的類型;對于C++,輸入文件可以是c++(標(biāo)準(zhǔn)的C++源文件)或c++-cpp-output(已經(jīng)被預(yù)處理過的C++源文件,不需再進(jìn)行預(yù)處理)。
注意
當(dāng)GCC編譯器遇到上表列出的文件后綴,它會當(dāng)成C++文件。但是,有些GCC編譯器(比如gcc)不能處理C++程序里很復(fù)雜的依賴關(guān)系,比如復(fù)雜的類庫,于是編譯失敗。所以你應(yīng)該用g++(或c++)來編譯C++程序。
GCCC++編譯器的命令行選項
許多命令行選項對于GCC編譯器家族都是通用的,下表只列出g++專有的命令行參數(shù)。
Option
Description
-fabi-version=n
指定編譯代碼需要符合的C++ ABI(application binary interface)版本。對于GCC版本3.4及更高,默認(rèn)的ABI版本是2。
-fcheck-new
保證new操作返回的指針為非空。
-fconserve-space
把全局變量的初始化操作延遲到運行的時候,common segment里的全局變量不初始化,這樣減少可執(zhí)行文件的大小。
-fdollars-in-identifiers
允許標(biāo)識符里出現(xiàn)$符號(默認(rèn))。
-fms-extensions
使g++忽略Microsoft Foundation Classes (MFC)中非標(biāo)準(zhǔn)用法的警告信息。
-fno-access-control
禁止訪問檢查
-fno-const-strings
強制g++把字符串常量的類型定義成char *,而不管ISO C++標(biāo)準(zhǔn)是否要求是const char *。
-fno-elide-constructors
強制g++總是調(diào)用copy構(gòu)造函數(shù),即使在用臨時對象初始化另一個同類型對象的時候。
-fno-enforce-eh-specs
禁止在運行時檢查異常處理違例。
-ffor-scope
對于for語句初始化部分申明的變量,限制其作用域是for循環(huán)以內(nèi)。你也可以用-fno-for-scope選項強制其作用域為下一個‘}’之前,雖然這和ISO標(biāo)準(zhǔn)沖突,但是舊版本g++和許多其他傳統(tǒng)的C++編譯器都是這樣做的。
-fms-extensions
禁止對Microsoft Foundation Classes代碼的不必要的警告。
-fno-gnu-keywords
禁止把typeof作為一個關(guān)鍵字,這樣就可以用它作為標(biāo)識符使用,你仍可以使用__typeof__關(guān)鍵字來代替它。該選項被包含在了-ansi選項里面。
-fno-implement-inlines
Saves space by not creating out-of-line copies of inline functions controlled by #pragma statements. Using this option will generate linker errors if the such functions are not inlined everywhere they are called
-fno-implicit-inline-templates
不創(chuàng)建隱含的模板實例以節(jié)省空間。(詳見-fno-implicit-templates)
-fno-implicit-templates
只創(chuàng)建外聯(lián)(非內(nèi)聯(lián))模板的顯式實例以節(jié)省空間。
-fno-nonansi-builtins
禁止使用非ANSI/ISO標(biāo)準(zhǔn)的內(nèi)置屬性,包括ffs、alloca、_exit、index、bzero、conjf及其他相關(guān)的函數(shù)。
-fno-operator-names
禁止使用and、bitand、bitor、compl、not、or和xor關(guān)鍵字作為對應(yīng)操作符的同義詞。
-fno-optional-diags
禁止非標(biāo)準(zhǔn)的內(nèi)部語法診斷,比如類中特殊的名字應(yīng)該在何時使用各種不同的形式。
-fno-rtti
禁止給類的虛函數(shù)產(chǎn)生運行時類型信息(RTTI)
-fno-threadsafe-statics
使g++不產(chǎn)生用于線程安全檢查的代碼,這樣能減少代碼量,如果不需要線程安全的話。
-fno-weak
使g++不使用弱符合支持,即使鏈接器支持它。這個選擇用于g++測試的時候,其他時候請不要使用。
-fpermissive
把代碼的語法錯誤作為警告,并繼續(xù)編譯進(jìn)程。
-frepo
允許模板實例化在連接時自動進(jìn)行。該選項包含了-fno-implicit-templates選項。
-fstats
編譯完成后顯示前端的統(tǒng)計信息。該選項一般只有g(shù)++開發(fā)人員使用。
-ftemplate-depth-n
保證模板實例化的遞歸深度不超過整數(shù)n
-fuse-cxa-atexit
注冊靜態(tài)對象的析構(gòu)函數(shù)時,使用__cxa_atexit而不是atexit。
-fvisibility=value
(GCC 4.02或以后)使g++不導(dǎo)出ELF(Executable and Linking Format,Linux和Solaris等系統(tǒng)上默認(rèn)的2進(jìn)制文件格式)中用hidden標(biāo)識的object模塊內(nèi)或庫內(nèi)的符號。該選項能減少目標(biāo)文件大小,加快符號表的查找,從而改善運行性能。但是,該選項也會因為不同的visibility等級而導(dǎo)致模塊間拋出異常發(fā)生問題,詳見后面的““Visibility Attributes and Pragmas for GCC C++ Libraries”一節(jié)。如果沒有使用該選項,那么默認(rèn)的visibility值是default,即導(dǎo)出所有目標(biāo)文件和庫里的符號。
-nostdinc++
禁止在C++的標(biāo)準(zhǔn)目錄里搜索頭文件。
g++編譯器的其他一些C++選項處理優(yōu)化、警告和代碼生成的任務(wù),我們在其他章節(jié)里討論。下表總結(jié)了專對C++的警告選項。
Option
Description
-Wabi
當(dāng)編譯器生成的代碼和標(biāo)準(zhǔn)C++ ABI不兼容的時候發(fā)出警告。對于GCC版本3.4和更高,默認(rèn)的ABI版本是2。
-Wctor-dtor-privacy
當(dāng)一個類的所有構(gòu)造函數(shù)和析構(gòu)函數(shù)都是私有時發(fā)出警告。
-Weffc++
當(dāng)出現(xiàn)不符合《Effective C++》(Scott Meyers,Addison-Wesley,2005,ISBN: 0-321-33487-6)風(fēng)格的代碼時給出警告
-Wno-deprecated
使用已過時C++屬性和用法時不給出警告。
-Wno-non-template-friend
當(dāng)非模板的友元函數(shù)定義在模板里時不給出警告。In the C++ language template specification, a friend must declare or define a nontemplate function if the name of the friend is an unqualified identifier.
-Wno-pmf-conversions
當(dāng)把一個指向類成員函數(shù)的指針隱式轉(zhuǎn)化成一般指針的時候不給出警告。
-Wnon-virtual-dtor
當(dāng)一個類需要虛析構(gòu)函數(shù)而又沒有申明虛析構(gòu)函數(shù)的時候給出警告。該選項被包含在-Wall選項里。
-Wold-style-cast
當(dāng)在C++源代碼里使用了傳統(tǒng)C語言風(fēng)格的類型轉(zhuǎn)換方式時,給出警告。
-Woverloaded-virtual
當(dāng)子類的函數(shù)申明覆蓋基類虛函數(shù)的時候給出警告。
-Wreorder
當(dāng)類成員變量的初始化順序和申明順序不一致的時候給出警告。g++編譯器會自動記錄所有變量的正確初始化順序。該選項被包含在-Wall選項里。
-Wsign-promo
當(dāng)一個重載操作把一個有符號數(shù)值轉(zhuǎn)換成無符號數(shù)值的時候給出警告。在版本3.4及以前,g++對無符號類型進(jìn)行了保護(hù),但是這和C++標(biāo)準(zhǔn)不一致。
-Wstrict-null-sentinel
當(dāng)用一個無類型的NULL作為哨兵的時候發(fā)出警告。哨兵是指一個無效的輸入值,通常代表輸入的結(jié)束。此問題的原因是無類型的NULL在不同的編譯器實現(xiàn)里有不同的大小,所以必須先轉(zhuǎn)化成固定的類型。
ABI Differences in g++ Versions
C++ ABI是一套API標(biāo)準(zhǔn),定義了C++庫提供的數(shù)據(jù)類型、類、方法、頭文件等的接口和規(guī)范。對庫和目標(biāo)文件來說,物理組織、參數(shù)傳遞方式和命名方式是很重要的,所以需要一個統(tǒng)一的接口,使編譯出來的C++程序與提供的庫的接口一致。這種一致性對語言特有的一些屬性更加重要,比如拋出異常和捕捉異常的時候。
從版本3開始的GNU C++編譯器,都遵循一個工業(yè)標(biāo)準(zhǔn)的C++ ABI規(guī)范,定義在http://www.codesourcery.com/cxx-abi/abi.html。雖然這個規(guī)范是為64位Itanium定制的,但是它適用于任何平臺,并且已經(jīng)作為GNU/Linux和BSD系統(tǒng)的C++ ABI的實現(xiàn)。
版本3.4以前的g++使用ABI版本1,之后使用ABI版本2。不同ABI版本之間的程序和庫不能混用。如果你不確定自己g++的ABI版本,可以用g++ --version命令檢查g++的版本,或用一個偽編譯命令顯示ABI標(biāo)識符,命令行如下:
g++ -E -dM - < /dev/null | awk '/GXX_ABI/ {print $3}'
如果顯示102,那么就是版本1;如果顯示1002,就是版本2。如果你必須用到以前版本ABI的庫,那么給g++加上選項-fabi-version=n,其中n就是你要兼容的ABI版本。這樣做只能算作權(quán)宜之計,把所有舊的代碼和庫更新到當(dāng)前版本才是最佳解決方案。
GNU C++ Implementation Details and Extensions
本文雖然不討論怎樣寫好C++程序,但是當(dāng)你用GCC的C++編譯器編譯你的C++程序的時候,你可以從GCC的擴展中得到許多好處,包括編譯器自身的優(yōu)勢和g++使用的標(biāo)準(zhǔn)C++庫libstdc++的優(yōu)勢。本節(jié)提煉出最為重要的一些擴展特性,并討論它們在C++規(guī)范和編譯器行為方面的一些差異。
Attribute Definitions Specific to g++
作為對visibility屬性(詳見于“Visibility Attributes and Pragmas for GCC C++ Libraries”)的補充,g++提供了2個額外的屬性,即init_priority(priority)和java_interface屬性。
The init_priority Attribute
該屬性允許用戶控制某個名字空間里的對象的初始化順序。通常,對象的初始化順序是它們在某個代碼單元里的定義順序。init_priority只有一個整型參數(shù),值為101到65535,越小表示優(yōu)先級越大。比如,在下面的偽碼里,類MyClass將比類YourClass先初始化:
class MyClass
{
};
class YourClass
{
__attribute__ ((visibility("default"))) void MyMethod();
};
要改變它們的初始化順序,你可以把代碼改成下面這樣:
class MyClass
{
__attribute__ ((init_priority(65535)));
};
class YourClass
{
__attribute__ ((init_priority(101)));
};
你只需要注意所使用的優(yōu)先級數(shù)值的順序,具體使用了哪個數(shù)值則無所謂(即只要MyClass的優(yōu)先級數(shù)值比YourClass大就行了,是不是65535101則無所謂)。
The java_interface Attribute
該屬性通知g++某個類是一個Java接口類,并只能在標(biāo)識了extern “Java”的模塊內(nèi)使用。調(diào)用這個類的函數(shù)使用的是GCC Java編譯器的接口表機制(interface table mechanism),而不是通常的C++虛函數(shù)表機制(virtual function table mechanism)。
提示
記住,Java的運行時環(huán)境需要更多的初始化工作。當(dāng)你混合使用C++和Java代碼時,最好用Java寫主程序,這樣能保證調(diào)用Java函數(shù)前初始化工作已經(jīng)做足了。
C++ Template Instantiation in g++
模板是C++最有用和最有趣的特性之一,能減少重復(fù)代碼,提高復(fù)用率,簡化調(diào)試和代碼維護(hù)工作。模板也有利于編譯時的類型檢查,比如,使用了模板就不用再傳遞void指針,因為你可以把模板參數(shù)實例化成任何需要的類型。
g++通過增加3個功能擴展了標(biāo)準(zhǔn)的ISO模板定義:
支持使用extern關(guān)鍵詞對實例化類型進(jìn)行前置申明;
The ability to instantiate the support data required by the compiler for a named template class without actually instantiating it by using the inline keyword
The ability to only instantiate the static data members of a class without instantiating support data or member functions by using the static keyword
基本上,GCC的g++編譯器支持Borland和Cfront(AT&T)兩種模板特性。要支持Borland的模板實例化和使用特性,g++使用-frepo選項允許預(yù)處理器在處理每個翻譯單元(源代碼文件)時進(jìn)行模板實例化,并把信息存在.rpo文件里。這些文件被后面的編譯過程使用,并由鏈接器最后合并成單個編譯單元。要支持Cfront特性,g++內(nèi)置了一個模板實例化庫并在鏈接的時候合并到代碼里。Cfront要求使用模板的代碼要么進(jìn)行顯式實例化,要么包含定義模板的申明文件。你可以把顯式實例化放在代碼的任何地方,或一個包含的頭文件里。對于后者,你可能要去掉-fno-implicit-templates選項,這樣你只得到了顯式實例化的那些實例。
Function Name Identifiers in C++ and C
GCC編譯器預(yù)定義了2個標(biāo)識符存儲當(dāng)前函數(shù)的標(biāo)識。__FUNCTION__標(biāo)識符只存儲函數(shù)名字,__PRETTY_FUNCTION__則存儲函數(shù)的全稱。在C程序里,這2種名字是一樣的,但是在C++程序里它們有區(qū)別。下面的程序展示了這種區(qū)別:
#include <iostream>
using namespace std;
class c {
public:
    void method_a(void)
    {
        cout<<"Function "<<__FUNCTION__<<" in "<<__FILE__<< endl;
        cout<<"Pretty Function "<<__PRETTY_FUNCTION__<<" in "
            << __FILE__ << endl;
    }
};
int main(void)
{
    c C;
    C.method_a();
    return 0;
}
運行的輸出是:
$ ./a.out
Function method_a in FUNCTION_example.cc
Pretty Function void c::method_a() in FUNCTION_example.cc
在C++里,__FUNCTION__和__PRETTY_FUNCTION__是變量,而不是宏定義,所以#ifdef __FUNCTION__是沒有意義的。
注意
如果你的GCC是3.2版本或更高,那么__FUNCTION__和__PRETTY_FUNCTION__的行為就和C99定義的__func__變量是一樣的。早于3.2版本的GCC編譯器把__FUNCTION__和__PRETTY_FUNCTION__定義成字符串,所以它們可以和其他字符串進(jìn)行串接操作。
Minimum and Maximum Value Operators
g++編譯器加入了<?和>?操作符,分別表示2個數(shù)值中較小的和較大的那個。比如,下面的代碼把10賦給min變量:
min = 10 <? 15;
而下面的代碼把15賦給max:
max = 10 >? 15;
提示
既然這些操作符是語言提供的,那么它們也能對任何類或enum類型進(jìn)行重載。
Using Java Exception Handling in C++ Applications
Java和C++的異常處理模型是不同的,雖然g++能猜測C++代碼何時使用了Java異常,你最好還是明確標(biāo)識出這種情況,避免鏈接錯誤。要告訴g++一塊代碼可能使用Java異常,把下面的代碼放在該翻譯單元中任何catch和throw代碼之前:
#pragma GCC java_exceptions
你不能在一個翻譯單元里同時使用Java和C++異常。
Visibility Attributes and Pragmas for GCC C++ Libraries
寫C++庫的時候一個普遍的問題就是可見的ELF符號太多了,其實許多符號都不能被外部使用,也不用對外公開。GCC版本4.02及更高提供了-fvisibility=value選項和相關(guān)的內(nèi)置屬性,使你可以控制這種行為,使用的方式和微軟C++編譯器提供的__declspec(dllexport)方式相似。新的-fhidden選項有2個可選值:default,導(dǎo)出目標(biāo)文件的所有符號(這也是默認(rèn)的行為);hidden,不導(dǎo)出當(dāng)前目標(biāo)模塊的符號。還可以在函數(shù)或類前加如下代碼來進(jìn)行設(shè)置:__attribute__ ((visibility("default")))和__attribute__ ((visibility("hidden")))。
默認(rèn)情況下,ELF導(dǎo)出全部符號。要隱藏特定目標(biāo)文件的符號,需要在編譯該文件的時候加上-fvisibility=hidden選項。這將導(dǎo)致makefile的復(fù)雜性大大增加,因為你要么需要手動設(shè)置每個文件的編譯選項,要么改變?nèi)志幾g選項導(dǎo)致任何符號都不能導(dǎo)出。這在類庫正常拋出異常或者調(diào)試某些變量的時候?qū)嵲谑莻€災(zāi)難。
讓指定的符號可見的好方式是聯(lián)合使用代碼屬性設(shè)置和編譯選項-fvisibility=hidden。如果要導(dǎo)出某個符號,先在它們的定義前加上__attribute__((visibility("default"))),比如下面這樣:
class MyClass
{
    int i;
    __attribute__ ((visibility("default"))) void MyMethod();
    …
};
然后給makefile增加-fvisibility=hidden的編譯選項,這樣所有其他的符號就被隱藏了。另一個稍微好點的方法是定義一個宏,并放到所有你不想導(dǎo)出的符號定義前面,然后使用默認(rèn)的導(dǎo)出所有符號,如下所示:
#define LOCAL __attribute__ ((visibility("hidden")))
class MyClass
{
    int i;
    LOCAL void MyMethod();
    …
};
編譯時不使用-fvisibility=value選項,這樣除了MyMethod被隱藏,其他符號都被導(dǎo)出。
還有一種控制可見屬性的pragma語法現(xiàn)在還能使用,不過將來可能要去掉,如下面這樣:
extern void foo(int);
#pragma GCC visibility push(hidden)
extern void bar(int);
#pragma GCC visibility pop
符號foo會被導(dǎo)出,但是bar則不會。這種方式雖然很簡單方便,但是建議你還是使用visibility__attribute__

posted on 2013-09-16 13:30 peakflys 閱讀(529) 評論(0)  編輯 收藏 引用


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


<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導(dǎo)航

統(tǒng)計

公告

人不淡定的時候,就愛表現(xiàn)出來,敲代碼如此,偶爾的靈感亦如此……

常用鏈接

留言簿(4)

隨筆分類

隨筆檔案

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            女主播福利一区| 欧美激情一区二区三区不卡| av成人老司机| 亚洲欧美日韩天堂一区二区| 国产精品视频yy9099| 亚洲专区在线视频| 久久精品二区三区| 欧美色图一区二区三区| 亚洲午夜国产成人av电影男同| 亚洲女人天堂成人av在线| 国产美女精品免费电影| 久久国产精彩视频| 久久国产精品久久久久久| 国语自产偷拍精品视频偷| 老色鬼精品视频在线观看播放| 亚洲第一精品电影| 亚洲一区3d动漫同人无遮挡| 国产日韩欧美一区| 欧美mv日韩mv国产网站app| 亚洲欧洲一区二区在线观看 | 久久久久国产精品一区| 永久91嫩草亚洲精品人人| 欧美日韩国产丝袜另类| 午夜亚洲福利在线老司机| 欧美阿v一级看视频| 9l国产精品久久久久麻豆| 国产精品乱码| 亚洲一区二区三区精品视频| 这里只有精品视频| 国产网站欧美日韩免费精品在线观看| 另类国产ts人妖高潮视频| 亚洲免费久久| 久久视频在线视频| 亚洲小说欧美另类社区| 禁久久精品乱码| 国产精品高潮呻吟久久av无限| 欧美在线视频一区二区三区| 亚洲欧洲三级| 免费欧美电影| 亚洲免费在线精品一区| 亚洲人成在线观看| 黑人操亚洲美女惩罚| 欧美性猛片xxxx免费看久爱| 欧美成人一二三| 久久精品青青大伊人av| 亚洲一区二区在线看| 99国产精品视频免费观看一公开| 麻豆成人综合网| 欧美一区2区三区4区公司二百| 一区在线免费| 国产精品日韩精品欧美精品| 欧美精品日日鲁夜夜添| 一本综合久久| 亚洲人成久久| 亚洲电影毛片| 免费精品99久久国产综合精品| 午夜视频一区在线观看| 狠狠色综合日日| 国产精品自拍在线| 国产精品婷婷| 国产精品久久久久永久免费观看| 欧美另类极品videosbest最新版本 | 亚洲成色最大综合在线| 国产亚洲综合精品| 国产欧美一区二区三区久久人妖 | 免费不卡中文字幕视频| 久久九九免费| 欧美在线网址| 久久精品1区| 久久精品导航| 欧美在线观看视频| 久久精品动漫| 久久精品国产99国产精品| 性一交一乱一区二区洋洋av| 午夜亚洲福利在线老司机| 午夜视频在线观看一区二区三区| 亚洲欧美精品在线观看| 亚洲欧美亚洲| 亚洲开发第一视频在线播放| 亚洲激情自拍| 亚洲精品社区| 亚洲一二三区在线观看| 亚洲一二三级电影| 欧美在线视频一区二区| 久久久五月天| 免费观看一区| 欧美日韩国产首页在线观看| 欧美系列精品| 国产日产欧美精品| 好看的日韩视频| 日韩午夜免费视频| 亚洲一区二区在线播放| 久久精品国产欧美激情| 欧美a级一区| 日韩午夜黄色| 午夜亚洲性色福利视频| 久久这里只精品最新地址| 欧美精选午夜久久久乱码6080| 欧美四级在线观看| 国产一本一道久久香蕉| 亚洲电影免费| 亚洲综合三区| 欧美r片在线| 一区二区三欧美| 久久精品国产亚洲高清剧情介绍| 欧美成年网站| 国产色婷婷国产综合在线理论片a| 一区二区在线看| 亚洲一区在线免费| 美女脱光内衣内裤视频久久影院 | 欧美激情中文不卡| 中文在线资源观看视频网站免费不卡| 先锋a资源在线看亚洲| 欧美a级一区| 国产伦精品一区二区三区高清| 亚洲高清不卡av| 亚洲影院在线| 欧美激情精品久久久久| 亚洲永久精品大片| 欧美成人三级在线| 国产一区二区三区无遮挡| 日韩小视频在线观看专区| 久久精品国产999大香线蕉| 亚洲三级国产| 久久婷婷蜜乳一本欲蜜臀| 国产精品久久久久久久久借妻 | 国产在线观看精品一区二区三区| 亚洲美女在线看| 久久久夜色精品亚洲| av成人国产| 欧美精品一区二区三区在线播放| 国产亚洲精品久久久久婷婷瑜伽| 亚洲视频免费观看| 亚洲丰满在线| 久久久久久日产精品| 国产麻豆成人精品| 亚洲一区二区三区精品视频| 欧美大片一区二区| 欧美在线亚洲在线| 国产精品免费视频xxxx| 99精品视频免费观看视频| 欧美国产91| 久久久精品日韩| 国产亚洲成av人片在线观看桃| 亚洲一二三区在线观看| 亚洲国产综合91精品麻豆| 久久久亚洲影院你懂的| 国产一区二区视频在线观看| 亚洲男女自偷自拍| 一区二区三区久久精品| 欧美日韩不卡在线| 一区二区久久久久久| 亚洲国产精品v| 欧美国产激情| 亚洲日韩成人| 91久久夜色精品国产九色| 欧美成人一区在线| 亚洲国产一区二区视频| 免费在线观看日韩欧美| 久久久久久久综合日本| 在线播放中文字幕一区| 浪潮色综合久久天堂| 久久久国产一区二区| 韩国成人精品a∨在线观看| 久久99伊人| 欧美一区二区三区日韩视频| 国产精品一区二区在线观看网站| 午夜精品久久久久久久| 亚洲一区欧美| 国产欧美成人| 久久久久久亚洲综合影院红桃| 久久精品亚洲热| 亚洲国产片色| 亚洲美女黄色片| 国产精品高潮视频| 欧美在线视频一区二区三区| 欧美一区二区在线免费播放| 国一区二区在线观看| 嫩草影视亚洲| 欧美日韩国产精品成人| 亚洲一区二区免费看| 午夜视频一区| 亚洲激情影院| 99国产精品自拍| 国产亚洲成精品久久| 欧美v国产在线一区二区三区| 欧美国产日韩视频| 亚洲欧美日韩在线高清直播| 午夜欧美理论片| 亚洲激情视频网| 一区二区三区视频在线| 国产一区二区日韩| 亚洲第一主播视频| 国产精品国色综合久久| 久久久精彩视频| 欧美日韩1234| 久久久久久欧美| 欧美精品一区二区蜜臀亚洲 | 麻豆国产精品777777在线| 亚洲一区二区三区乱码aⅴ|