一、Linux GNU C和ANSI C的區(qū)別
1、標(biāo)準(zhǔn)庫的不同
ANSI C定義了一個基本的標(biāo)準(zhǔn)庫,包含了大約15個頭文件,如stdio.h、stdlib.h、string.h等。這些頭文件定義了C語言中常用的函數(shù)、宏和數(shù)據(jù)類型。ANSI C的標(biāo)準(zhǔn)庫只包含了最基本的函數(shù),不包含任何系統(tǒng)特定的功能。
而GNU C標(biāo)準(zhǔn)庫則是在ANSI C標(biāo)準(zhǔn)庫的基礎(chǔ)上進(jìn)行了擴(kuò)展,增加了大量的系統(tǒng)特定的函數(shù)和頭文件。例如,GNU C的標(biāo)準(zhǔn)庫包含了
2、宏定義的不同
在ANSI C中,預(yù)處理器中定義的宏只能傳遞簡單的表達(dá)式。在GNU C中,預(yù)處理器中定義的宏可以傳遞任何復(fù)雜的表達(dá)式。
3、函數(shù)參數(shù)的類型檢查
在ANSI C中,函數(shù)參數(shù)的類型檢查比較嚴(yán)格。如果調(diào)用foo函數(shù)時傳入的參數(shù)類型不正確,編譯器會報錯。
在GNU C中,函數(shù)參數(shù)的類型檢查比較寬松。
如果調(diào)用foo函數(shù)時傳入的參數(shù)類型不正確,編譯器不會報錯,而是會進(jìn)行隱式類型轉(zhuǎn)換。這種寬松的類型檢查可以使得程序更加靈活,但也容易導(dǎo)致一些潛在的錯誤。
4、常量的定義方式
在ANSI C中,常量只能使用const關(guān)鍵字進(jìn)行定義。而在GNU C中,常量可以使用#define宏定義進(jìn)行定義。
5、可變參數(shù)的定義方式
在ANSI C中,可變參數(shù)的定義方式是使用