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

首頁(yè) > 編程 > C++ > 正文

C/C++學(xué)習(xí)之路之C及C++發(fā)展史及標(biāo)準(zhǔn)

2019-11-06 06:31:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
本人當(dāng)初學(xué)習(xí)C/C++的記錄 資源很多都是來(lái)自網(wǎng)上的,如有版權(quán)請(qǐng)及時(shí)告知

C和C++

??C++是C語(yǔ)言的一個(gè)超集。C++有一個(gè)眾所周知的特性:對(duì)C語(yǔ)言的高度兼容。這樣的兼容性不僅體現(xiàn)在程序員可以較為容易地將C代碼“升級(jí)”為C++代碼上,也體現(xiàn)在C代碼可以被C++的編譯器所編譯上。 ??C++的第一個(gè)標(biāo)準(zhǔn)是1998年制定的C++98,而C的第二個(gè)官方標(biāo)準(zhǔn)是1999年制定C99,C99制定時(shí),借鑒了很多C++98中的特性,2011年,新C++標(biāo)準(zhǔn),C++11發(fā)布,增添了新特性,同時(shí)兼容C99中的特性。

C和C++做程序的區(qū)別

C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事務(wù))控制)。C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事務(wù))控制。

??所以C與C++的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤霸O(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中”。

C發(fā)展史

??1951年,IBM的Jhon Backus(Fortran開(kāi)發(fā)小組組長(zhǎng))基于匯編語(yǔ)言著手研發(fā)Fortran語(yǔ)言。 ??1960年,圖靈獎(jiǎng)獲得者Alan J.Perlis在巴黎舉行的有全世界一流軟件專家參加的討論會(huì)上,發(fā)表了”算法語(yǔ)言Algol 60報(bào)告”,確定了程序設(shè)計(jì)語(yǔ)言Algol 60。Algol60語(yǔ)言的第一個(gè)編譯器由Edsger W. Dijkstra來(lái)實(shí)現(xiàn)。1962年,Alan J.Perlis又對(duì)Algol 60進(jìn)行了修正。Algo60語(yǔ)言,是從Fortran演化的一個(gè)標(biāo)準(zhǔn),目的是標(biāo)準(zhǔn)化一種數(shù)值計(jì)算語(yǔ)言。 ??1963年,劍橋大學(xué)將ALGOL 60語(yǔ)言發(fā)展成為CPL語(yǔ)言(Combined PRogramming Language)。 ??1967年,劍橋大學(xué)的Matin Richards對(duì)CPL語(yǔ)言進(jìn)行了簡(jiǎn)化,于是產(chǎn)生了BCPL語(yǔ)言。 ??1970年,美國(guó)貝爾實(shí)驗(yàn)室的Ken Thompson將BCPL進(jìn)行了修改,并為它起了一個(gè)有趣的名字“B語(yǔ)言”(最初是為Unix設(shè)計(jì)的)。并且他用B語(yǔ)言寫了第一個(gè)UNIX操作系統(tǒng)(第二版)。 ??1973年,美國(guó)貝爾實(shí)驗(yàn)室的D.M. Ritchie在B語(yǔ)言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語(yǔ)言,他取了BCPL的第二個(gè)字母作為這種語(yǔ)言的名字,這就是C語(yǔ)言。此后,其用C語(yǔ)言對(duì)Unix進(jìn)行了重寫(第三版)。

C標(biāo)準(zhǔn)

??最初,C語(yǔ)言沒(méi)有官方標(biāo)準(zhǔn)。1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,從而使C語(yǔ)言成為目前世界上流行最廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言。而這本書附錄中的C Referrence Manual成為了事實(shí)上的C語(yǔ)言標(biāo)準(zhǔn),被人們稱為K&R C或者Classic C。但是,該附錄中只定義了C語(yǔ)言,卻沒(méi)有定義C庫(kù)。由于C的出現(xiàn)離不開(kāi)Unix,因此,Unix上實(shí)現(xiàn)的庫(kù)成為了一個(gè)C語(yǔ)言事實(shí)上的標(biāo)準(zhǔn)庫(kù)。 ??隨著C語(yǔ)言的日益流行,美國(guó)國(guó)家標(biāo)準(zhǔn)化組織(ANSI)在1983年成立了一個(gè)委員會(huì)(X3J11),以制定C語(yǔ)言標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)于1989年正式被批準(zhǔn)采用。它就是ANSI C標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了C語(yǔ)言標(biāo)準(zhǔn)和C的標(biāo)準(zhǔn)庫(kù)。1990年,國(guó)際標(biāo)準(zhǔn)化組織(ISO)也要制定了一個(gè)C標(biāo)準(zhǔn),以使C語(yǔ)言在國(guó)際上統(tǒng)一標(biāo)準(zhǔn),方便使用,他們直接采用了ANSI C標(biāo)準(zhǔn),發(fā)布了標(biāo)準(zhǔn)文件:ISO/IEC 9899-1990 Programming languages – C。最終第一版的C標(biāo)準(zhǔn)被稱為C98或C90。算是C語(yǔ)言的第一個(gè)官方標(biāo)準(zhǔn)。由于ANSI C出現(xiàn)較早,該標(biāo)準(zhǔn)也稱為 ANSI C。 ??1994年,ISO 對(duì)C語(yǔ)言標(biāo)準(zhǔn)的修訂工作正式開(kāi)始。1999年12月1日,國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC)旗下的C語(yǔ)言標(biāo)準(zhǔn)委員會(huì)(ISO/IEC JTC1/SC22/WG14)正式發(fā)布了標(biāo)準(zhǔn)文件: ISO/IEC 9899:1999 - Programming languages – C。這就是大家熟知的C99標(biāo)準(zhǔn)。這成為了C語(yǔ)言的第二個(gè)官方標(biāo)準(zhǔn)。 ??C99的修訂為C語(yǔ)言引入了大量新的特性,其借鑒了C++98標(biāo)準(zhǔn)一些特性。然而,如今不是所有C的編譯器都支持C99標(biāo)準(zhǔn),而完全或幾乎完全支持C99標(biāo)準(zhǔn)的主流編譯器有:GCC、Clang、Intel C++ Compiler等。另外,Visual Studio2013也部分支持了C99語(yǔ)法特征。 ??C99標(biāo)準(zhǔn)之后,新的C語(yǔ)言標(biāo)準(zhǔn)是國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC)在2011年12月8日正式發(fā)布的C11標(biāo)準(zhǔn),官方正式名為ISO/IEC 9899:2011

??C標(biāo)準(zhǔn)由ISO和IEC旗下的C語(yǔ)言標(biāo)準(zhǔn)委員會(huì)(ISO/IEC JTC1/SC22/WG14)編寫,在其官方網(wǎng)站(http://www.open-std.org/)上可以找到標(biāo)準(zhǔn)的草稿,草稿是免費(fèi)的!

C99新特性

對(duì)編譯器限制增加了,比如源程序每行要求至少支持到4095字節(jié),變量名函數(shù)名的要求支持到63字節(jié) (extern要求支持到31)預(yù)處理增強(qiáng)了。例如: 宏支持取參數(shù) #define Macro(…) VA_ARGS使用宏的時(shí)候,參數(shù)如果不寫,宏里用#,## 這樣的東西會(huì)擴(kuò)展成空串。(以前會(huì)出錯(cuò)的)支持 // 行注釋(這個(gè)特性實(shí)際上在C89的很多編譯器上已經(jīng)被支持了)增加了新關(guān)鍵字restrict(C++目前并未引入), inline, _Complex, _Imaginary, _Bool支持 long long, long double _Complex, float _Complex 這樣的類型支持 <: :> <% %> %: %:%: ,等等奇怪的符號(hào)替代,D&E 里提過(guò)這個(gè)支持了不定長(zhǎng)的數(shù)組。數(shù)組的長(zhǎng)度就可以用變量了。聲明類型的時(shí)候呢,就用 int a[*] 這樣的寫法。不過(guò)考慮到效率和實(shí)現(xiàn),這玩意并不是一個(gè)新類型。所以就不能用在全局里,或者 struct union 里面,如果你用了這樣的東西,goto 語(yǔ)句就受限制了。變量聲明不必放在語(yǔ)句塊的開(kāi)頭,for 語(yǔ)句提倡這么寫 for(int i=0;i<100;++i) 就是說(shuō),int i 的聲明放在里面,i 只在 for 里面有效。當(dāng)一個(gè)類似結(jié)構(gòu)的東西需要臨時(shí)構(gòu)造的時(shí)候,可以用 (type_name){.numberN=valueN, .numberK=valueK,…} 這有點(diǎn)像 C++ 的構(gòu)造函數(shù)初始化結(jié)構(gòu)的時(shí)候現(xiàn)在可以這樣寫: struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 }; struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對(duì) .c,.d 賦值的字符串里面,/u 支持 unicode 的字符支持 16 進(jìn)制的浮點(diǎn)數(shù)的描述所以 printf scanf 的格式化串多支持了 ll / LL對(duì)應(yīng)新的 long long 類型。浮點(diǎn)數(shù)的內(nèi)部數(shù)據(jù)描述支持了新標(biāo)準(zhǔn),這個(gè)可以用 #pragma 編譯器指定除了已經(jīng)有的 line file 以外,又支持了一個(gè) func 可以得到當(dāng)前的函數(shù)名對(duì)于非常數(shù)的表達(dá)式,也允許編譯器做化簡(jiǎn)修改了對(duì)于 / % 處理負(fù)數(shù)上的定義,比如老的標(biāo)準(zhǔn)里 -22 / 7 = -3, -22 % 7 = -1 而現(xiàn)在 -22 / 7 = -4, -22 % 7 = 6取消了不寫函數(shù)返回類型默認(rèn)就是 int 的規(guī)定允許 struct 定義的最后一個(gè)數(shù)組寫做 [] 不指定其長(zhǎng)度描述const const int i; 將被當(dāng)作 const int i; 處理增加和修改了一些標(biāo)準(zhǔn)頭文件。輸入輸出對(duì)寬字符還有長(zhǎng)整數(shù)等做了相應(yīng)的支持

增加restrict指針

??關(guān)鍵字restrict只用于限定指針;該關(guān)鍵字用于告知編譯器,所有修改該指針?biāo)赶騼?nèi)容的操作全部都是基于(base on)該指針的,即不存在其它進(jìn)行修改操作的途徑;這樣的后果是幫助編譯器進(jìn)行更好的代碼優(yōu)化,生成更有效率的匯編代碼。restrict指針指針主要用做函數(shù)變?cè)?,或者指向由malloc()函數(shù)所分配的內(nèi)存變量。restrict數(shù)據(jù)類型不改變程序的語(yǔ)義。 ??如果某個(gè)函數(shù)定義了兩個(gè)restrict指針變?cè)?,編譯程序就假定它們指向兩個(gè)不同的對(duì)象,memcpy()函數(shù)就是restrict指針的一個(gè)典型應(yīng)用示例。 ??C89中memcpy()函數(shù)原型如下: void *memcpy (void *s1, const void *s2, size_t size); ??如果s1和s2所指向的對(duì)象重疊,其操作就是未定義的。memcpy()函數(shù)只能用于不重疊的對(duì)象。 ??C99中memcpy()函數(shù)原型如下: void *memcpy(void *restrict s1, const void *restrict s2,size_t size); ??通過(guò)使用restrict修飾s1和s2 變?cè)?,可確保它們?cè)谠撛椭兄赶虿煌膶?duì)象。 ??但要注意:restrict是C99中新增的關(guān)鍵字,在C89和C++中都不支持,在gcc中可以通過(guò)-std=c99來(lái)得到對(duì)它的支持。

inline(內(nèi)聯(lián))關(guān)鍵字

??內(nèi)聯(lián)函數(shù)除了保持結(jié)構(gòu)化和函數(shù)式的定義方式外,還能使程序員寫出高效率的代碼。函數(shù)的每次調(diào)用與返回都會(huì)消耗相當(dāng)大的系統(tǒng)資源,尤其是當(dāng)函數(shù)調(diào)用發(fā)生在重復(fù)次數(shù)很多的循環(huán)語(yǔ)句中時(shí)。一般情況下,當(dāng)發(fā)生一次函數(shù)調(diào)用時(shí),變?cè)枰M(jìn)棧,各種寄存器內(nèi)存需要保存。當(dāng)函數(shù)返回時(shí),寄存器的內(nèi)容需要恢復(fù)。如果該函數(shù)在代碼內(nèi)進(jìn)行聯(lián)機(jī)擴(kuò)展,當(dāng)代碼執(zhí)行時(shí),這些保存和恢復(fù)操作旅游活動(dòng)會(huì)再發(fā)生,而且函數(shù)調(diào)用的執(zhí)行速度也會(huì)大大加快。函數(shù)的聯(lián)機(jī)擴(kuò)展會(huì)產(chǎn)生較長(zhǎng)的代碼,所以只應(yīng)該內(nèi)聯(lián)對(duì)應(yīng)用程序性能有顯著影響的函數(shù)以及長(zhǎng)度較短的函數(shù)

新增數(shù)據(jù)類型

_Bool

??值是0或1。C99中增加了用來(lái)定義bool、true以及false宏的頭文件

_Complex and _Imaginary(復(fù)數(shù)和虛數(shù))

??C99標(biāo)準(zhǔn)中定義的復(fù)數(shù)類型如下:

float_Complex; float_Imaginary; double_Complex; double_Imaginary; long double_Complex; long double_Imaginary;

??

long long int

??C99標(biāo)準(zhǔn)中引進(jìn)了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64 - 1)。long long int能夠支持的整數(shù)長(zhǎng)度為64位。對(duì)應(yīng)的常量后綴是ll/ull/LL/ULL;格式化輸入輸出為%lld,%llu,%llx……

對(duì)數(shù)組的增強(qiáng)

可變長(zhǎng)數(shù)組

??C99中,程序員聲明數(shù)組時(shí),數(shù)組的維數(shù)可以由任一有效的整型表達(dá)式確定,包括只在運(yùn)行時(shí)才能確定其值的表達(dá)式,這類數(shù)組就叫做可變長(zhǎng)數(shù)組,但是只有局部數(shù)組才可以是變長(zhǎng)的。 ??可變長(zhǎng)數(shù)組的維數(shù)在數(shù)組生存期內(nèi)是不變的,也就是說(shuō),可變長(zhǎng)數(shù)組不是動(dòng)態(tài)的??梢宰兓闹皇菙?shù)組的大小。

void func(int n){ int vla[n]; printf("int vla[n] = %d/n", sizeof(vla));}變長(zhǎng)數(shù)組有一些限制:變長(zhǎng)數(shù)組必須是自動(dòng)存儲(chǔ)類的,意味著它們必須在函數(shù)內(nèi)部或作為函數(shù)參數(shù)聲明,而且聲明時(shí)不可以進(jìn)行初始化。C99標(biāo)準(zhǔn)規(guī)定,可以省略函數(shù)原型中的名稱,但是如果省略名稱,則需要用星號(hào)來(lái)代替省略的維數(shù): int sum2d(int , int, int ar[*][*]); // 只能用在函數(shù)聲明中

數(shù)組聲明中的類型修飾符

??在C99中,如果需要使用數(shù)組作為函數(shù)變?cè)?,可以在?shù)組聲明的方括號(hào)內(nèi)使用static關(guān)鍵字,這相當(dāng)于告訴編譯程序,變?cè)赶虻臄?shù)組將至少包含指定的元素個(gè)數(shù)。也可以在數(shù)組聲明的方括號(hào)內(nèi)使用restrict,volatile,const關(guān)鍵字,但只用于函數(shù)變?cè)?。如果使用restrict,指針是初始訪問(wèn)該對(duì)象的惟一途徑。如果使用const,指針始終指向同一個(gè)數(shù)組。使用volatile沒(méi)有任何意義。(類型限定詞和static關(guān)鍵字只能用于具有數(shù)組類型的函數(shù)形參的第一維中)。由于形參中的VLA被自動(dòng)調(diào)整為等效的指針,因此這些類型限定詞實(shí)際上限定的是一個(gè)指針,例如:

void func3( int, int, int a[const][*] ); // 等價(jià)于void func( int, int, int ( *const a )[*] );void func4( int, int, int a[const static 20][*] ); //static表示傳入的實(shí)參的值至少要跟其所修飾的長(zhǎng)度表達(dá)式的值一樣大。

單行注釋

??// 行注釋也是從C++過(guò)來(lái)的東西。引入了單行注釋標(biāo)記 “//” , 可以象C++一樣使用這種注釋了。//注釋另外一個(gè)最大的好處還是在于排版方便。 ??/* / 注釋是不支持嵌套的,所以只要里頭出現(xiàn)一個(gè)/就會(huì)導(dǎo)致注釋結(jié)束。不過(guò)這樣也帶來(lái)了一個(gè)有點(diǎn)可怕的陷阱,比如原來(lái)用/* */注釋的宏:

#define macro(arg1, arg2) / func(arg1, /* xxxxxxx */ / arg2 /* xxxxxxx */ / )

你要是改成這樣:

#define macro(arg1, arg2) / func(arg1, // xxxxxxx / arg2 // xxxxxxx / )

這就杯具了~~因?yàn)檫@樣等價(jià)于:

#define macro(arg1, arg2) func(arg1, // xxxxxxx arg2 // xxxxxxx )

arg2就落入第一個(gè)//的魔掌,變成注釋了~~ ??總得來(lái)說(shuō),用//寫注釋肯定是比較方便的。只要能保證別在一個(gè)文件里面一會(huì)兒用/* */做行注釋,一會(huì)兒用//做行注釋就行了。 建議所有的單行注釋都可以用//搞。而文檔化注釋(函數(shù)頭部、文件頭部或者重要數(shù)據(jù)結(jié)構(gòu)頭部的那些注釋),還是建議用正統(tǒng)的格式來(lái)寫:

/** * xxxxxxx * xxxxxxx */

另外最好別用//來(lái)壘多行注釋。

分散代碼與聲明

??解除了原先必須在block的第一條語(yǔ)句之前聲明變量的限制:現(xiàn)在C99也和C++一樣,可以在代碼中隨時(shí)聲明變量了。

#include <stdio.h>int main(void){ int num1 = 3; int num1 = 3; printf("%d/n", num1); int num2 = 10; // 變量定義 printf("%d/n", num2); return(0);}

??其實(shí)混合聲明對(duì)于編碼的重要意義在于它對(duì)提高代碼的可讀性方面幫助很大。在C89里面,稍微復(fù)雜一點(diǎn)的函數(shù)中通常會(huì)看到這樣的壯觀景象:

int load_elf_file(const char *filename, int argc, int argv, int *retcode){ int elf_exec_fileno; int i, retval; uint k, elf_bss, elf_brk, elf_entry; uint start_code, end_code, end_data; struct elf_phdr *elf_ppnt, *elf_phdata; struct elfhdr elf_ex; struct file *file; ...;}

??這個(gè)就是C89必須在Block第一條語(yǔ)句之前聲明變量帶來(lái)的后果,不管一個(gè)變量是否一直到Block的最后一行才被用到,你也不得不在一開(kāi)始就聲明它。

預(yù)處理程序的修改

變參宏(Variadic Macros)

??宏可以帶變?cè)?,在宏定義中用省略號(hào)(…)表示。內(nèi)部預(yù)處理標(biāo)識(shí)符VA_ARGS決定變?cè)獙⒃诤翁幍玫教鎿Q。變參宏的最大好處是可以讓你很容易地用宏來(lái)封裝一些帶變參的函數(shù)(主要是打印函數(shù)) 如可以這樣寫一個(gè)輸出到stderr的宏:

#define print_err(...) fprintf(stderr, __VA_ARGS__) // 宏參數(shù)里面“...”的部份會(huì)展開(kāi)到__VA_ARGS__處。

??如果在VA_ARGS前面加上##,就可以寫出允許變參部份為空的變參宏。比如我自己常用的調(diào)試信息打印宏:

#define debug(fmt, ...) / printf("[DEBUG] %s:%d <%s>: " fmt, / __FILE__, __LINE__, __func__, ##__VA_ARGS__)

??##VA_ARGS表示變參“…”部份允許為空。當(dāng)變參部份為空時(shí)VA_ARGS會(huì)展開(kāi)成空字符串,并且##前面那個(gè)逗號(hào)也會(huì)在展開(kāi)時(shí)去掉。于是你可以這樣調(diào)用這個(gè)宏:debug(“Hello”); 變量

_Pragma運(yùn)算符

??C99引入了在程序中定義編譯指令的另外一種方法:_Pragma運(yùn)算符。格式如下: _Pragma("directive") ??其中directive是要滿打滿算的編譯指令。_Pragma運(yùn)算符允許編譯指令參與宏替換。 ??如果字符串文字具有L前綴,則刪除該前綴。 ??刪除前導(dǎo)和結(jié)尾雙引號(hào)。 ??用雙引號(hào)替換每個(gè)換碼序列’。 ??用單個(gè)反斜杠替換每個(gè)換碼序列/

內(nèi)部編譯指令

STDC FP_CONTRACT ON/OFF/DEFAULT 若為ON,浮點(diǎn)表達(dá)式被當(dāng)做基于硬件方式處理的獨(dú)立單元。默認(rèn)值是定義的工具。 STDC FEVN_access ON/OFF/DEFAULT 告訴編譯程序可以訪問(wèn)浮點(diǎn)環(huán)境。默認(rèn)值是定義的工具。 STDC CX_LIMITED_RANGE ON/OFF/DEFAULT 若值為ON,相當(dāng)于告訴編譯程序某程序某些含有復(fù)數(shù)的公式是可靠的。默認(rèn)是OFF。

新增的內(nèi)部宏

STDC_HOSTED 若操作系統(tǒng)存在,則為1 STDC_VERSION 199991L或更高。代表C的版本 STDC_IEC_599 若支持IEC 60559浮點(diǎn)運(yùn)算,則為1 STDC_IEC_599_COMPLEX 若支持IEC 60599復(fù)數(shù)運(yùn)算,則為1 STDC_ISO_10646 由編譯程序支持,用于說(shuō)明ISO/IEC 10646標(biāo)準(zhǔn)的年和月格式:yyymmmL

for語(yǔ)句內(nèi)的變量聲明

??C99中,程序員可以在for語(yǔ)句的初始化部分定義一個(gè)或多個(gè)變量,這些變量的作用域僅于本for語(yǔ)句所控制的循環(huán)體內(nèi)。在C89中,這樣是不可以的,具體可以在VC6中驗(yàn)證(VC6支持到C89)。for循環(huán)的初始化語(yǔ)句中聲明的任何變量的作用域是整個(gè)循環(huán)(包括控制和迭代表達(dá)式)。 如下:

for (int i=0; i<10; i++){ //loop body};

復(fù)合賦值

??C99復(fù)合賦值中,可以指定對(duì)象類型的數(shù)組、結(jié)構(gòu)或聯(lián)合表達(dá)式。當(dāng)使用復(fù)合賦值時(shí),應(yīng)在括弧內(nèi)指定類型,后跟由花括號(hào)圍起來(lái)的初始化列表;若類型為數(shù)組,則不能指定數(shù)組的大小。建成的對(duì)象是未命名的。 例: double *fp = (double[]) {1.1, 2.2, 3.3}; ??該語(yǔ)句用于建立一個(gè)指向double的指針fp,且該指針指向這個(gè)3元素?cái)?shù)組的第一個(gè)元素。 在文件域內(nèi)建立的復(fù)合賦值只在程序的整個(gè)生存期內(nèi)有效。在模塊內(nèi)建立的復(fù)合賦值是局部對(duì)象,在退出模塊后不再存在。

伸縮型數(shù)組成員

??C99具有一個(gè)稱為伸縮型數(shù)組成員(flexible array member)的新特性。結(jié)構(gòu)中的最后一個(gè)元素允許是未知大小的數(shù)組,這就叫做柔性數(shù)組成員。利用這一新特性可以聲明最后一個(gè)成員是一個(gè)具有特殊屬性的數(shù)組的結(jié)構(gòu)體。該數(shù)組成員的特殊屬性之一是它不立即存在。第二個(gè)特殊屬性是您可以編寫適當(dāng)?shù)拇a使用這個(gè)伸縮型數(shù)組成員,就像它確實(shí)存在并且擁有您需要的任何數(shù)目的元素一樣。柔性數(shù)組成員在做變長(zhǎng)的報(bào)文或字符串處理時(shí)極為好用,也是一個(gè)幾乎所有的C碼農(nóng)都應(yīng)該掌握的技巧。 聲明一個(gè)伸縮型數(shù)組成員的規(guī)則: - 伸縮型數(shù)組成員必須是最后一個(gè)數(shù)組成員。 - 結(jié)構(gòu)中必須至少有一個(gè)其他成員。 - 伸縮型數(shù)組就像普通數(shù)組一樣被聲明,但是它的方括號(hào)是空的。 比如:

typedef struct { int count; char Word[]; // 只能放在末尾,等價(jià)于gcc的char word[0]} word_counter_t;

注意:

sizeof返回的這種結(jié)構(gòu)大小不包括柔性數(shù)組的內(nèi)存直接聲明帶有伸縮數(shù)組成員結(jié)構(gòu)體的變量沒(méi)有任何意義,因?yàn)樯炜s數(shù)組沒(méi)有內(nèi)存,例如:word_counter_t wd; // 這里變量wd中沒(méi)有word包含柔性數(shù)組成員的結(jié)構(gòu)用malloc()函數(shù)進(jìn)行內(nèi)存的動(dòng)態(tài)分配,并且分配的內(nèi)存應(yīng)該大于結(jié)構(gòu)的大小,以適應(yīng)柔性數(shù)組的預(yù)期大小。當(dāng)給其指針動(dòng)態(tài)分配內(nèi)存空間時(shí),多余的空間會(huì)分配給scores數(shù)組

指定的初始化符

??C99中,該特性對(duì)經(jīng)常使用稀疏數(shù)組的程序員十分有用。簡(jiǎn)單來(lái)說(shuō),就是在初始化結(jié)構(gòu)體和數(shù)組時(shí),可以通過(guò)指定具體成員名或數(shù)組下標(biāo)來(lái)賦初值。 用于數(shù)組的格式: [index] = vol; // 其中,index表示數(shù)組的下標(biāo),vol表示本數(shù)組元素的初始化值。 例如: int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化 用于結(jié)構(gòu)或聯(lián)合的格式如下: .成員名 = vol; // 其中, vol表示本數(shù)組元素的初始化值。 例如: struct example{ int k, m, n; } object = {.m = 10, .n = 200}; 注意:該方法只能用在定義時(shí)初始化,不能再后續(xù)使用 指定初始化符

printf()和scanf()函數(shù)系列的增強(qiáng)

??C99中printf()和scanf()函數(shù)系列引進(jìn)了處理long long int和unsigned long long int數(shù)據(jù)類型的特性。long long int 類型的格式修飾符是ll。在printf()和scanf()函數(shù)中,ll適用于d, i, o, u 和x格式說(shuō)明符。另外,C99還引進(jìn)了hh修飾符。當(dāng)使用d, i, o, u和x格式說(shuō)明符時(shí),hh用于指定char型變?cè)l和hh修飾符均可以用于n說(shuō)明符。 ??格式修飾符a和A用在printf()函數(shù)中時(shí),結(jié)果將會(huì)輸出十六進(jìn)制的浮點(diǎn)數(shù)。格式如下:[-]0xh, hhhhp + d 使用A格式修飾符時(shí),x和p必須是大寫。A和a格式修飾符也可以用在scanf()函數(shù)中,用于讀取浮點(diǎn)數(shù)。調(diào)用printf()函數(shù)時(shí),允許在%f說(shuō)明符前加上l修飾符,即%lf,但不起作用。

C99新增的庫(kù)

C89中標(biāo)準(zhǔn)的頭文件

<assert.h> 定義宏assert()<ctype.h> 字符處理<errno.h> 錯(cuò)誤報(bào)告<float.h> 定義與實(shí)現(xiàn)相關(guān)的浮點(diǎn)值<limits.h> 定義與實(shí)現(xiàn)相關(guān)的各種極限值<locale.h> 支持函數(shù)setlocale()<locale.h> 數(shù)學(xué)函數(shù)庫(kù)使用的各種定義<setjmp.h> 支持非局部跳轉(zhuǎn)<signal.h> 定義信號(hào)值<stdarg.h> 支持可變長(zhǎng)度的變?cè)斜?lt;stddef.h> 定義常用常數(shù)<stdio.h> 支持文件輸入和輸出<stdlib.h> 其他各種聲明<string.h> 支持串函數(shù)<time.h> 支持系統(tǒng)時(shí)間函數(shù)

C99新增的頭文件和庫(kù)

<complex.h> 支持復(fù)數(shù)算法<fenv.h> 給出對(duì)浮點(diǎn)狀態(tài)標(biāo)記和浮點(diǎn)環(huán)境的其他方面的訪問(wèn)<inttypes.h> 定義標(biāo)準(zhǔn)的、可移植的整型類型集合。也支持處理最大寬度整數(shù)的函數(shù)<iso646.h> 在1995年第一次修訂時(shí)首次引進(jìn),用于定義對(duì)應(yīng)各種運(yùn)算符的宏<stdbool.h> 支持布爾數(shù)據(jù)類型類型。定義宏bool,以便兼容于C++<stdint.h> 定義標(biāo)準(zhǔn)的、可移植的整型類型集合。該文件包含在<inttypes.h>中<tgmath.h> 定義一般類型的浮點(diǎn)宏<wchar.h> 在1995年第一次修訂時(shí)首次引進(jìn),用于支持多字節(jié)和寬字節(jié)函數(shù)<wctype.h> 在1995年第一次修訂時(shí)首次引進(jìn),用于支持多字節(jié)和寬字節(jié)分類函數(shù)

func預(yù)定義標(biāo)識(shí)符

??用于指出func所存放的函數(shù)名,類似于字符串賦值。

冪等限定符

??C99中,如果同一類型限定符在同一說(shuō)明符限定符列表中出現(xiàn)多次(無(wú)論直接出現(xiàn)還是通過(guò)一個(gè)或多個(gè)typedef),行為與該類型限定符僅出現(xiàn)一次時(shí)相同。 ??在C90中,以下代碼會(huì)導(dǎo)致錯(cuò)誤:

const const int a; int main(void){ return(0);}

但是,對(duì)于C99,C編譯器接受多個(gè)限定符。

Static及數(shù)組聲明符中允許的其他類型限定符

??現(xiàn)在,關(guān)鍵字static可以出現(xiàn)在函數(shù)聲明符中及參數(shù)的數(shù)組聲明符中,表示編譯器至少可以假定許多元素將傳遞到所聲明的函數(shù)中。使優(yōu)化器能夠作出以其他方式無(wú)法確定的假定。

C編譯器將數(shù)組參數(shù)調(diào)整為指針,因此void foo(int a[]) 與void foo(int *a) 相同。 如果您指定void foo(int * restrict a); 等類型限定符,則C 編譯器使用實(shí)質(zhì)上與聲明限定指針相同的數(shù)組語(yǔ)法void foo(int a[restrict]); 表示它。 C編譯器還使用static限定符保留關(guān)于數(shù)組大小的信息。例如,如果您指定void foo(int a[10]),則編譯器仍將它表達(dá)為void foo(int *a)。按以下所示使用static限定符:void foo(int a[static 10]),讓編譯器知道指針a不是NULL,并且使用它可訪問(wèn)至少包含十個(gè)元素的整數(shù)數(shù)組。

 其它特性的改動(dòng)

1.放寬的轉(zhuǎn)換限制

限制 C89標(biāo)準(zhǔn) C99標(biāo)準(zhǔn)
數(shù)據(jù)塊的嵌套層數(shù) 15 127
條件語(yǔ)句的嵌套層數(shù) 8 63
內(nèi)部標(biāo)識(shí)符中的有效字符個(gè)數(shù) 31 63
外部標(biāo)識(shí)符中的有效字符個(gè)數(shù) 6 31
結(jié)構(gòu)或聯(lián)合中的成員個(gè)數(shù) 127 1023
函數(shù)調(diào)用中的參數(shù)個(gè)數(shù) 31 127

2. 不再支持隱含式的int規(guī)則 每個(gè)聲明中的聲明說(shuō)明符中應(yīng)至少指定一個(gè)類型說(shuō)明符,現(xiàn)在不支持沒(méi)有類型就默認(rèn)是int的聲明語(yǔ)句。比如在C89中, auto i = 0;是合法的 3. 刪除了隱含式函數(shù)聲明 4. 對(duì)返回值的約束。C99中,非空類型函數(shù)必須使用帶返回值的return語(yǔ)句 5. 擴(kuò)展的整數(shù)類型

擴(kuò)展類型 含義
int16_t 整數(shù)長(zhǎng)度為精確16位
int_least16_t 整數(shù)長(zhǎng)度為至少16位
int_fast32_t 最穩(wěn)固的整數(shù)類型,其長(zhǎng)度為至少32位
intmax_t 最大整數(shù)類型
uintmax_t 最大無(wú)符號(hào)整數(shù)類型

6. 對(duì)整數(shù)類型提升規(guī)則的改進(jìn)。C89中,表達(dá)式中類型為char,short int或int的值可以提升為int或unsigned int類型。 7. C99中,每種整數(shù)類型都有一個(gè)級(jí)別。例如:long long int 的級(jí)別高于int, int的級(jí)別高于char等。在表達(dá)式中,其級(jí)別低于int或unsigned int的任何整數(shù)類型均可被替換成int或unsigned int類型。 ??但是各個(gè)公司對(duì)C99的支持所表現(xiàn)出來(lái)的興趣不同。當(dāng)GCC和其它一些商業(yè)編譯器支持C99的大部分特性的時(shí)候,微軟和Borland卻似乎對(duì)此不感興趣。

C++發(fā)展史

??1967 年,Simula語(yǔ)言中第一次出現(xiàn)了面向?qū)ο?(OO) 的概念,但由于當(dāng)時(shí)軟件規(guī)模還不大,技術(shù)也還不太成熟,面向?qū)ο蟮膬?yōu)勢(shì)并未發(fā)揮出來(lái)。1980年,Smalltalk-80出現(xiàn)后,面向?qū)ο蠹夹g(shù)才開(kāi)始發(fā)揮魅力。 ??1979 年,Bjarne Stroustrup 借鑒 Simula中”Class” 的概念,開(kāi)始著手“C with Classes”的研發(fā)工作,“C with Classes”表明這種新語(yǔ)言是在C基礎(chǔ)上研發(fā)的,是C語(yǔ)言的超集。新語(yǔ)言的初始版本除了包括C語(yǔ)言的基本特征之外,還具備類、簡(jiǎn)單繼承、內(nèi)聯(lián)機(jī)制、函數(shù)默認(rèn)參數(shù)以及強(qiáng)類型檢查等特性。Bjarne Stroustrup的第一款“C with classes”編譯器叫Cfront(由“C with Classes”編寫),這個(gè)名字源自一個(gè)叫做Cpre的C編譯器。Cfront的機(jī)理是把“C with classes”的代碼翻譯成原生C代碼。 ??1983年,“C with Classes”語(yǔ)言更名為C++。C語(yǔ)言中“++”運(yùn)算子的作用是對(duì)一個(gè)變量進(jìn)行遞增操作,由此我們多少可以知曉Stroustrup對(duì)這種新語(yǔ)言的定位。這個(gè)時(shí)期,許多重要的特性被加入,其中包括虛函數(shù)、函數(shù)重載、引用機(jī)制(符號(hào)為&)、const關(guān)鍵字以及雙斜線的單行注釋(從BCPL語(yǔ)言引入)。 ??1986 年,B.Stroustrup 出版了《The C++ Programming Language》第一版,這時(shí) C++ 已經(jīng)開(kāi)始受到關(guān)注,B.Stroustrup 被稱為 C++之父(Creator of C++)。 ??1989 年,負(fù)責(zé) C++ 標(biāo)準(zhǔn)化的 ANSI X3J16掛牌成立。1989年,C++再次版本更新,這次更新引入了多重繼承、保護(hù)成員以及靜態(tài)成員等語(yǔ)言特性。 ??1990 年,B.Stroustrup 出版了《The Annotated C++ Reference Manual》(簡(jiǎn)稱 ARM),由于當(dāng)時(shí)還沒(méi)有 C++ 標(biāo)準(zhǔn),ARM 成了事實(shí)上的標(biāo)準(zhǔn)。1990 年,Template(模板) 和 Exception(異常) 加入到了 C++ 中,使 C++ 具備了泛型編程(Generic Programming)和更好的運(yùn)行期錯(cuò)誤處理方式。 ??1991 年,負(fù)責(zé) C++ 語(yǔ)言國(guó)際標(biāo)準(zhǔn)化的技術(shù)委員會(huì)工作組 ISO/IEC JTC1/SC22/WG21 召開(kāi)了第一次會(huì)議,開(kāi)始進(jìn)行 C++ 國(guó)際標(biāo)準(zhǔn)化的工作。從此,ANSI 和 ISO 的標(biāo)準(zhǔn)化工作保持同步,互相協(xié)調(diào)。1993 年,RTTI(運(yùn)行期類型識(shí)別)和Namespace(名字空間)加入到 C++ 中。1994年,C++ 標(biāo)準(zhǔn)草案出臺(tái)。 B.Stroustrup 出版了《The Design and Evolution of C++》(簡(jiǎn)稱 D&E)。本來(lái),C++ 標(biāo)準(zhǔn)已接近完工,這時(shí) STL(標(biāo)準(zhǔn)模板庫(kù)) 的建議草案被提交到標(biāo)準(zhǔn)委員會(huì),對(duì) STL 標(biāo)準(zhǔn)化的討論又一次推遲了 C++ 標(biāo)準(zhǔn)的出臺(tái)。 ??1998年,C++標(biāo)準(zhǔn)委員會(huì)發(fā)布了C++語(yǔ)言的第一個(gè)國(guó)際標(biāo)準(zhǔn)—ISO/IEC 14882:1998,該標(biāo)準(zhǔn)即為大名鼎鼎的C++98。C++98的提出,《The Annotated C++ Reference Manual》功不可沒(méi)。同時(shí),1979年開(kāi)始研發(fā)的標(biāo)準(zhǔn)模板庫(kù)(Standard Template Library,STL)也被納入了該版標(biāo)準(zhǔn)中。ANSI 和 ISO 終于先后批準(zhǔn) C++ 語(yǔ)言成為美國(guó)國(guó)家標(biāo)準(zhǔn)和國(guó)際標(biāo)準(zhǔn)。 ??2003年,標(biāo)準(zhǔn)委員會(huì)針對(duì)98版本中存在的諸多問(wèn)題進(jìn)行了修訂,并沒(méi)有增加新的特性,修訂后發(fā)布了C++03。 C++11,之前被稱作C++0x,即ISO/IEC 14882:2011,是目前的C++編程語(yǔ)言的第三版正式標(biāo)準(zhǔn)。它取代第二版標(biāo)準(zhǔn)ISO/IEC 14882:2003(第一版ISO/IEC 14882:1998發(fā)布于1998年,第二版于2003年發(fā)布,分別通稱C++98以及C++03,兩者差異很小)。新的標(biāo)準(zhǔn)包含了幾個(gè)核心語(yǔ)言增加的新特性,而且擴(kuò)展C++標(biāo)準(zhǔn)程序庫(kù),并入了大部分的C++ Technical Report 1程序庫(kù)(數(shù)學(xué)的特殊函數(shù)除外)。為了兼容C語(yǔ)言,C++11將對(duì)以下C99特性的支持也都納入了新標(biāo)準(zhǔn)中:

__func__預(yù)定義標(biāo)識(shí)符_Pragma 操作符不定參數(shù)宏定義以及__VA_ARGS__寬窄字符串連接long long類型

C++標(biāo)準(zhǔn)

參考

官方標(biāo)準(zhǔn)文檔
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

99久久精品免费看国产交换| www成人免费观看网站| 日本激情一区二区| 国产成人精品一区二区在线小狼| 一级淫片免费看| caoporen人人| 亚洲精品视频在线观看免费| 欧美日韩久久一区| 亚洲色图网站| 欧美日韩一级二级| 97视频在线免费播放| 亚洲最快最全在线视频| 国产又黄又粗视频| 老**午夜毛片一区二区三区| 久久久久免费网| 手机在线观看av| 销魂美女一区二区三区视频在线| 欧美精品一区二区精品网| 欧美成人免费视频| 亚洲欧美日韩精品综合在线观看| 欧美日韩高清影院| 精品一区二区在线免费观看| 中文字幕第17页| 欧美成人三级在线视频| 国产三级精品在线| 水野朝阳av一区二区三区| 在线观看黄色av| 成**人特级毛片www免费| 国产日产欧美一区二区视频| 中文先锋资源| 国产福利片在线观看| 日韩美女写真福利在线观看| 在线视频在线视频7m国产| 97影院手机在线观看| 亚洲影视一区| 久久精品一区二区免费播放| 美女把尿口扒开给男人桶视频| 国产精品福利网| 欧美成人专区| 国产精品v欧美精品v日韩精品| 欧美巨大黑人极品精男| 高清不卡日本v二区在线| 国产福利电影网| 在线播放成人| 久久夜夜操妹子| 日本福利视频一区| 在线一区二区三区精品| 午夜视频在线观看一区二区三区| 亚洲精品伦理在线| 久久久国产精品一区| 激情成人午夜视频| 国产精品久久777777换脸| 电影久久久久久| 美女喷水网站| 久久久噜噜噜久久| 欧美视频在线观看 亚洲欧| 久久韩国免费视频| 伊人精品一区二区三区| 天堂а在线中文在线无限看推荐| 狠狠色噜噜狠狠狠888奇米| 手机亚洲第一页| 网曝91综合精品门事件在线| 日本成人看片网址| 欧美草草影院在线视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 99久久亚洲一区二区三区青草| 另类的小说在线视频另类成人小视频在线| 激情另类综合| 国产精品中文字幕亚洲欧美| 成人福利小视频| 曰本人一级毛片免费完整视频| 天天爽夜夜爽| 色婷婷成人综合| 国模极品一区二区三区| 色综合久久九月婷婷色综合| 日韩电影天堂视频一区二区| 欧美日韩综合视频网址| 九色蝌蚪在线视频| 国产日韩精品久久久| 精品资源在线看| 亚洲人成伊人成综合网久久久| 成人动漫中文字幕| 中文字幕国产一区二区| www.香蕉视频在线观看| 亚洲另类一区二区| 99久久婷婷国产综合精品电影√| 日韩精品视频网| 激情六月丁香| 午夜免费入口| 久久久久久久久久久久国产精品| 另类在线视频| 翔田千里在线视频| 青青草综合在线| 国内外激情在线| 久本草在线中文字幕亚洲| 综合区小说区图片区在线一区| 这里只有久久精品| 成人短视频在线观看免费| 成人亚洲综合| 国产主播福利在线| 国产在线视频不卡| 国产一区欧美一区| 亚洲自拍小视频免费观看| 亚洲国产精品一区二区尤物区| 久久精品国产v日韩v亚洲| 一区二区高清视频在线观看| 天堂√在线中文官网在线| 久久人体av| 精品欧美色视频网站在线观看| 少妇高潮惨叫久久久久| xfplay资源站色先锋在线观看| 国产在线播放一区| 丁香资源影视免费观看| 在线电影欧美日韩一区二区私密| 精品亚洲va在线va天堂资源站| 三年中文在线观看免费大全中国| 中文字幕在线观看欧美| 波多野结衣家庭教师在线| 亚洲日本中文字幕免费在线不卡| youjizzxxxx18| 影音先锋可以看的网站| 亚洲午夜激情免费视频| 日本少妇xxxxx| 久久久老熟女一区二区三区91| 亚洲欧美黄色片| 欧美gv在线观看| 国产在线国偷精品免费看| 天天干,天天操,天天射| 青青操国产视频| 亚洲精品视频在线观看网站| 精品久久久999| 亚洲少妇激情视频| 高清日韩电视剧大全免费| 午夜精品在线视频一区| 亚洲国产中文字幕久久网| 欧美乱大交xxxxx潮喷l头像| 亚洲黄色成人久久久| 奇米网一区二区| 国产91沈先生在线播放| 国产精品日韩精品| 免费精品视频一区二区三区| 一区二区三区回区在观看免费视频| 亚洲免费在线视频观看| 一区二区三区丝袜| 久久综合伊人77777麻豆最新章节| 中文字幕无人区二| 天堂√中文最新版在线| 亚洲国产毛片aaaaa无费看| 亚洲爆乳无码一区二区三区| 国产精品高潮视频| 久热国产精品视频一区二区三区| 欧美理论电影在线观看| 亚洲青青青在线视频| 四虎国产精品免费久久| 综合婷婷亚洲小说| 91免费视频网站| 天天摸夜夜操| 成人网av.com/| 五月婷婷视频在线| 久久成人免费电影| 亚洲人体av| 欧美艳星kaydenkross| 欧美一站二站| 色综合亚洲精品激情狠狠| 我要看一级黄色大片| 亚洲图色中文字幕| 免费看一级毛片| 国产成人自拍网站| 青青草av免费在线观看| 久久精品亚洲麻豆av一区二区| 久久久国产精品x99av| 又黄又www的网站| 成人一区二区三区| 欧美激情一区在线观看| 麻豆一区二区99久久久久| 亚洲啪啪aⅴ一区二区三区9色| 美腿丝袜一区二区三区| 97干在线视频| 欧美大学生性色视频| 你懂的视频在线观看资源| 欧美午夜片欧美片在线观看| 麻豆91在线| 你懂的成人av| 伊人中文字幕在线| 亚洲欧美在线播放| 97视频在线观看播放| 国产一区二区三区在线免费观看| 中文字幕第20页| 免费福利影院| 亚洲精品午夜国产va久久成人| 97在线观看免费观看高清| 久久亚洲国产中v天仙www| 国产麻豆精品在线| 日本成人a视频| 99视频在线免费播放| 免费黄网站在线观看| 久久久久久久久97| 国产成人精品免高潮在线观看| 精品亚洲成av人在线观看| 色悠悠在线视频| 久久精品国产电影| 欧美精品一区二区三区在线看午夜| 久久久精品999| 国产日韩精品一区观看| 熟女熟妇伦久久影院毛片一区二区| 182午夜视频| 欧美一区二区观看视频| 欧美12一14sex性hd| 日韩 欧美 自拍| wwww在线观看| 日韩欧美一区二区三区| 中文字幕网站在线观看| 中文字幕中文字幕一区二区| 九色福利视频| 久久久女女女女999久久| 国产精品久久久一区| 可以在线观看的av| 国产精品第12页| 一本一道久久a久久精品综合| 亚洲AV成人精品| 青娱乐精品在线视频| 99国产精品国产精品久久| 成人免费直播| 国产综合婷婷| 精品视频第一页| 国产成人精品无码片区在线| 麻豆精品国产免费| 色猫咪免费人成网站在线观看| 97秋霞电影网| 国产精品av久久久久久麻豆网| 国产精品探花一区二区在线观看| 天海翼一区二区三区四区在线观看| 亚洲欧美日韩国产另类专区| 日韩欧美精品在线观看| 91亚洲精品一区二区乱码| 亚洲欧洲日夜超级视频| 亚洲国产精华液| 天天综合网天天做天天受| 爱爱永久免费视频| 成a人片在线观看www视频| 国产午夜精品久久久久久免费视| 77777亚洲午夜久久多人| 欧洲成人综合网| www夜片内射视频日韩精品成人| 91亚洲精品久久久蜜桃借种| 国产传媒欧美日韩成人| 精品麻豆国产| 中文在线视频观看| 精品999网站| 99热一区二区三区| 欧美色欧美亚洲另类二区精品| 日本精品久久| 国产精品igao视频网网址不卡日韩| 亚洲精品激情视频| 原纱央莉成人av片| 日日爽夜夜爽| 亚洲精蜜桃久在线| 久久人妻无码aⅴ毛片a片app| 91最新在线观看| 性色av免费观看| 久久精品免费在线| 青檬在线电视剧在线观看| 亚洲国产精品视频在线| 精品成人一区二区三区免费视频| 久久人人爽人人爽人人片av高清| 深夜福利成人| 日产精品久久久久久久| 91精品人妻一区二区三区蜜桃2| 欧美日韩国产在线播放网站| 激情欧美日韩一区| 亚洲精品一区二区三区蜜桃| 欧美一区二区三区在线| 在线观看欧美日韩国产| 少妇精品视频一区二区| 国产日韩欧美一二三区| 欧美激情一二区| 高潮无码精品色欲av午夜福利| 欧美丰满老妇熟乱xxxxyyy| 久久久性生活视频| 国产亚洲欧美日韩美女| 视频免费1区二区三区| 欧美日韩成人综合| 中文字幕精品视频| 日韩美女网站| 日韩免费视频网站| av黄色在线免费观看| 久久久久九九九| 国产人成亚洲第一网站在线播放| 视频国产一区二区| 日本aa大片在线播放免费看| 国产精品主播一区二区| 国产一线天粉嫩馒头极品av| 国产精品久久久久久久蜜臀| 中文欧美在线视频| 一区二区视频免费在线观看| 一区二区激情小说| 国产综合在线视频| 日韩中文字幕视频在线观看| 国产精品激情| 精品少妇3p| 男女av一区三区二区色多| 亚洲国产精品第一区二区| 成年网在线观看免费观看网址| 免费在线观看的毛片| 在线看成人av| 欧美丰满老妇熟乱xxxxyyy| av美女在线观看| 亚洲三级电影网站| 亚洲国产va精品久久久不卡综合| 69av成年福利视频| 亚洲wwwww| 国产精品无人区| 国产精品99久久久久久www| 久久精品72免费观看| 成人动漫h在线观看| 高清在线不卡av| 日本а中文在线天堂| 激情久久中文字幕| 日韩在线播放av| 亚洲国产婷婷| 亚洲女同另类| 天天色天天射综合网| 毛片无码国产| 韩国成人动漫| 亚洲综合自拍| 国产一区二区在线视频播放| 一区二区三区我不卡| 亚洲乱码中文字幕|