C89和C99区别
1.對數組的增強
可變長數組- 1
C99中,程序員聲明數組時,數組的維數可以由任一有效的整型表達式確定,包括只在運行時才能確定?
其值的表達式,這類數組就叫做可變長數組,但是只有局部數組才可以是變長的.?
可變長數組的維數在數組生存期內是不變的,也就是說,可變長數組不是動態的.可以變化的只是數組的大小.?
可以使用*來定義不確定長的可變長數組。
- 1
在C99中,如果需要使用數組作為函數變元,可以在數組聲明的方括號內使用static關鍵字,這相?
當于告訴編譯程序,變元所指向的數組將至少包含指定的元素個數。也可以在數組聲明的方括號內使用?
restrict,volatile,const關鍵字,但只用于函數變元。如果使用restrict,指針是初始訪問該對象的惟一途?
徑。如果使用const,指針始終指向同一個數組。使用volatile沒有任何意義。
2.單行注釋
引入了單行注釋標記 "//" , 可以象C++一樣使用這種注釋了。- 1
3. 分散代碼與聲明
預處理程序的修改
4. for語句內的變量聲明
C99中,程序員可以在for語句的初始化部分定義一個或多個變量,這些變量的作用域僅于本for語?
句所控制的循環體內。比如:?
代碼:
- 1
- 2
- 3
5.復合賦值
C99中,復合賦值中,可以指定對象類型的數組、結構或聯合表達式。當使用復合賦值時,應在括弧?
內指定類型,后跟由花括號圍起來的初始化列表;若類型為數組,則不能指定數組的大小。建成的對象是?
未命名的。?
例: double *fp = (double[]) {1.1, 2.2, 3.3};?
該語句用于建立一個指向double的指針fp,且該指針指向這個3元素數組的第一個元素。 在文件?
域內建立的復合賦值只在程序的整個生存期內有效。在模塊內建立的復合賦值是局部對象,在退出模塊后?
不再存在。
6.指定的初始化符
C99中,該特性對經常使用稀疏數組的程序員十分有用。指定的初始化符通常有兩種用法:用于數組,?
以及用于結構和聯合。用于數組的格式:[index] = vol; 其中,index表示數組的下標,vol表示本數組?
元素的初始化值。?
例如: int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化.用于結構或聯?
合的格式如下:?
member-name(成員名稱)?
對結構進行指定的初始化時,允許采用簡單的方法對結構中的指定成員進行初始化。?
例如: struct example{ int k, m, n; } object = {m = 10,n = 200};?
其中,沒有初始化k。對結構成員進行初始化的順序沒有限制。
7. printf()和scanf()函數系列的增強
C99中printf()和scanf()函數系列引進了處理long long int和unsigned long long int數據類型?
的特性。long long int 類型的格式修飾符是ll。在printf()和scanf()函數中,ll適用于d, i, o, u 和x?
格式說明符。另外,C99還引進了hh修飾符。當使用d, i, o, u和x格式說明符時,hh用于指定char?
型變元。ll和hh修飾符均可以用于n說明符。?
格式修飾符a和A用在printf()函數中時,結果將會輸出十六進制的浮點數。格式如下:[-]0xh, hhhhp?
+ d 使用A格式修飾符時,x和p必須是大寫。A和a格式修飾符也可以用在scanf()函數中,用于讀取?
浮點數。調用printf()函數時,允許在%f說明符前加上l修飾符,即%lf,但不起作用。
8.C99新增的庫
C89中標準的頭文件?
10.?func預定義標識符
用于指出func所存放的函數名,類似于字符串賦值。
11. 其它特性的改動
放寬的轉換限制?
?
限制 C89標準 C99標準?
數據塊的嵌套層數 15 127?
條件語句的嵌套層數 8 63?
內部標識符中的有效字符個數 31 63?
外部標識符中的有效字符個數 6 31?
結構或聯合中的成員個數 127 1023?
函數調用中的參數個數 31 127
不再支持隱含式的int規則?
刪除了隱含式函數聲明?
對返回值的約束?
C99中,非空類型函數必須使用帶返回值的return語句.?
擴展的整數類型?
擴展類型 含義?
int16_t 整數長度為精確16位?
int_least16_t 整數長度為至少16位?
int_fast32_t 最穩固的整數類型,其長度為至少32位?
intmax_t 最大整數類型?
uintmax_t 最大無符號整數類型?
對整數類型提升規則的改進?
C89中,表達式中類型為char,short int或int的值可以提升為int或unsigned int類型.?
C99中,每種整數類型都有一個級別.例如:long long int 的級別高于int, int的級別高于char?
等.在表達式中,其級別低于int或unsigned int的任何整數類型均可被替換成int或unsigned int類型.
12. 新增數據類型
_Bool ?
值是0或1。C99中增加了用來定義bool、true以及false宏的頭文件夾
總結
- 上一篇: ssh源码编译安装mysql_总结源码编
- 下一篇: C/C++语言中联合体union的妙用