今天總結(jié)一下C語言標(biāo)準(zhǔn)庫。
C語言標(biāo)準(zhǔn)庫(C89)包含15個(gè)頭文件,新的C99以及C11又定義了一些其他的庫,這里略過不說,常用的如下,
<assert.h> - 包含assert()函數(shù),這個(gè)函數(shù)現(xiàn)在還有人用嗎?至少我這幾年沒有見人用了,因?yàn)樗鼤?huì)直接導(dǎo)致進(jìn)程退出,而且只會(huì)記下當(dāng)前的調(diào)用棧,只能發(fā)現(xiàn)問題而不能幫助解決問題,在現(xiàn)實(shí)中使用日志系統(tǒng)或者直接用標(biāo)準(zhǔn)輸出記錄問題會(huì)幫助更大。
<ctype.h> - 字符測(cè)試函數(shù),可能有很多人喜歡自己實(shí)現(xiàn)類似islower()或者tolower()的函數(shù),不過這個(gè)庫里的函數(shù)在某些場(chǎng)景真的很有用。不如isalnum()檢查是不是字母或者數(shù)字,isprint()檢查是不是可打印的字符,還有isspace()可以檢查是不是白空格。
<errno.h> - 很多庫函數(shù)或者系統(tǒng)函數(shù)會(huì)把錯(cuò)誤代碼寫入errno. 記錄錯(cuò)誤日志時(shí),要檢查一下出錯(cuò)的調(diào)用是否記錄errno。
<math.h> - 數(shù)學(xué)運(yùn)算的庫,常用的如冪運(yùn)算pow()和余數(shù)運(yùn)算fmod().
<stdarg.h> - 如果函數(shù)中使用了可變參數(shù),需要用這個(gè)庫來解析這些參數(shù)。
<stdio.h> - 這可能是C語言最常用的頭文件了吧,定義了一些文件操作的方法,比如打開文件fopen(),和關(guān)閉文件fclose(),以及輸出格式化字符串printf(), sprintf()和snprintf()。注意snprintf()是C99標(biāo)準(zhǔn)定義的函數(shù),有些老的編譯器不支持。
<stdlib.h> - 定義了字符串轉(zhuǎn)換成數(shù)字的函數(shù)如atof(), atoi(),以及內(nèi)存分配和釋放的函數(shù)malloc(), calloc()等。
<string.h> - 定義了字符數(shù)組的操作,如strcpy(),strcmp()等。還有內(nèi)存復(fù)制的操作如memcpy(),memmove()等。
還有一些不太常用的頭文件,比如<float.h> <limits.h> <setjmp.h> <signal.h> <stddef.h> <locale.h> <time.h>.