日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 玩轉(zhuǎn)嵌入式
[導(dǎo)讀]有很多工程師喜歡自己封裝一些標(biāo)準(zhǔn)庫(kù)已有的函數(shù),其實(shí)自己封裝的函數(shù),并不一定比標(biāo)準(zhǔn)庫(kù)好,有時(shí)候反而代碼更冗余,且有bug。下面就來(lái)分享一下C語(yǔ)言常見(jiàn)的一些標(biāo)準(zhǔn)庫(kù)。標(biāo)準(zhǔn)頭文件包括:一、標(biāo)準(zhǔn)定義()?文件里包含了標(biāo)準(zhǔn)庫(kù)的一些常用定義,無(wú)論我們包含哪個(gè)標(biāo)準(zhǔn)頭文件,都會(huì)被自動(dòng)包含進(jìn)來(lái)。這個(gè)...

有很多工程師喜歡自己封裝一些標(biāo)準(zhǔn)庫(kù)已有的函數(shù),其實(shí)自己封裝的函數(shù),并不一定比標(biāo)準(zhǔn)庫(kù)好,有時(shí)候反而代碼更冗余,且有bug。下面就來(lái)分享一下C語(yǔ)言常見(jiàn)的一些標(biāo)準(zhǔn)庫(kù)。

標(biāo)準(zhǔn)頭文件包括:
  • 一、標(biāo)準(zhǔn)定義()?文件里包含了標(biāo)準(zhǔn)庫(kù)的一些常用定義,無(wú)論我們包含哪個(gè)標(biāo)準(zhǔn)頭文件,都會(huì)被自動(dòng)包含進(jìn)來(lái)。
    這個(gè)文件里定義:類型size_t(sizeof運(yùn)算符的結(jié)果類型,是某個(gè)無(wú)符號(hào)整型);
    類型ptrdiff_t(兩個(gè)指針相減運(yùn)算的結(jié)果類型,是某個(gè)有符號(hào)整型);
    類型wchar_t(寬字符類型,是一個(gè)整型,其中足以存放本系統(tǒng)所支持的所有本地環(huán)境中的字符集的所有編碼值。這里還保證空字符的編碼值為0);
    符號(hào)常量NULL(空指針值);
    宏offsetot?(這是一個(gè)帶參數(shù)的宏,第一個(gè)參數(shù)應(yīng)是一個(gè)結(jié)構(gòu)類型,第二個(gè)參數(shù)應(yīng)是結(jié)構(gòu)成員名。
    offsetot(s,m)求出成員m在結(jié)構(gòu)類型t的變量里的偏移量)。
    注:其中有些定義也出現(xiàn)在其他頭文件里(如NULL)。
    二、錯(cuò)誤信息(定義了一個(gè)int類型的表達(dá)式errno,可以看作一個(gè)變量,其初始值為0,一些標(biāo)準(zhǔn)庫(kù)函數(shù)執(zhí)行中出錯(cuò)時(shí)將它設(shè)為非0值,但任何標(biāo)準(zhǔn)庫(kù)函數(shù)都設(shè)置它為0。
    里還定義了兩個(gè)宏EDOM和ERANGE,都是非0的整數(shù)值。數(shù)學(xué)函數(shù)執(zhí)行中遇到參數(shù)錯(cuò)誤,就會(huì)將errno置為EDOM,如出現(xiàn)值域錯(cuò)誤就會(huì)將errno置為ERANGE。
    三、輸入輸出函數(shù)(文件打開(kāi)和關(guān)閉:
    FILE *fopen(const char *filename, const char *mode);int fclose(FILE * stream);字符輸入輸出:
    int fgetc(FILE *fp);int fputc(int c, FILE *fp);getc和putc與這兩個(gè)函數(shù)類似,但通過(guò)宏定義實(shí)現(xiàn)。通常有下面定義:
    #define getchar() getc(stdin)#define putchar(c) putc(c, stdout)int ungetc(int c, FILE* stream); //把字符 c 退回流 stream格式化輸入輸出:
    int scanf(const char *format, ...);int printf(const char *format, ...);int fscanf(FILE *stream, const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int sscanf(char *s, const char *format, ...);int sprintf(char *s, const char *format, ...);行式輸入輸出:
    char *fgets(char *buffer, int n, FILE *stream);int fputs(const char *buffer, FILE *stream);char *gets(char *s);int puts(const char *s);直接輸入輸出:
    size_t fread(void *pointer, size_t size, size_t num, FILE *stream);size_t fwrite(const void *pointer, size_t size, size_t num, FILE *stream);四、數(shù)學(xué)函數(shù)(1.三角函數(shù):
    三角函數(shù)sincostan
    反三角函數(shù)asinacosatan
    雙曲函數(shù)sinhcoshtanh

    2.指數(shù)和對(duì)數(shù)函數(shù):
    e為底的指數(shù)函數(shù)exp
    自然對(duì)數(shù)函數(shù)log
    10為底的對(duì)數(shù)函數(shù)log10

    3.其他函數(shù):
    平方根sqrt
    絕對(duì)值fabs
    乘冪,第一個(gè)參數(shù)作為底,第二個(gè)是指數(shù)double pow(double, double)
    實(shí)數(shù)的余數(shù),兩個(gè)參數(shù)分別是被除數(shù)和除數(shù)double fmod(double, double)

    注:所有上面未給出類型特征的函數(shù)都取一個(gè)參數(shù),其參數(shù)與返回值都是double類型。
    下面函數(shù)返回雙精度值(包括函數(shù)ceil和floor)。在下表里,除其中有特別說(shuō)明的參數(shù)之外,所有函數(shù)的其他參數(shù)都是double類型。
    函數(shù)原型意義解釋
    ceil(x)求出不小于x的最小整數(shù)(返回與這個(gè)整數(shù)對(duì)應(yīng)的double值)
    floor(x)求出不大于x的最大整數(shù)(返回與這個(gè)整數(shù)對(duì)應(yīng)的double值)
    atan2(y, x)求出?tan-1(y/x),其值的范圍是[-pai,pai]?
    ldexp(x, int n)求出x*2n
    frexp(x, int?*exp)?x分解為?y*2n,?是位于區(qū)間?[1/2,1)里的一個(gè)小數(shù),作為函數(shù)結(jié)果返回,整數(shù)n?通過(guò)指針*exp返回(應(yīng)提供一個(gè)int變量地址)。當(dāng)x?0時(shí)這兩個(gè)結(jié)果的值都是0
    modf(x, double*ip)x分解為小數(shù)部分和整數(shù)部分,小數(shù)部分作為函數(shù)返回值,整數(shù)部分通過(guò)指針*ip返回。


    五、字符處理函數(shù)(見(jiàn)下表:
    int isalpha(c)c是字母字符
    int isdigit(c)c是數(shù)字字符
    int isalnum(c)c是字母或數(shù)字字符
    int isspace(c)c是空格、制表符、換行符
    int isupper(c)c是大寫字母
    int islower(c)c是小寫字母
    int iscntrl(c)c是控制字符
    int isprint(c)c是可打印字符,包括空格
    int isgraph(c)c是可打印字符,不包括空格
    int isxdigit(c)c是十六進(jìn)制數(shù)字字符
    int ispunct(c)c是標(biāo)點(diǎn)符號(hào)
    int tolower(int c)當(dāng)c是大寫字母時(shí)返回對(duì)應(yīng)小寫字母,否則返回c本身
    int toupper(int c)當(dāng)c是小寫字母時(shí)返回對(duì)應(yīng)大寫字母,否則返回c本身

    注:條件成立時(shí)這些函數(shù)返回非0值。最后兩個(gè)轉(zhuǎn)換函數(shù)對(duì)于非字母參數(shù)返回原字符。
    六、字符串函數(shù)(1.字符串函數(shù)所有字符串函數(shù)列在下表里,函數(shù)描述采用如下約定:s、t表示 (char *)類型的參數(shù),cs、ct表示(const char*)類型的參數(shù)(它們都應(yīng)表示字符串)。n表示size_t類型的參數(shù)(size_t是一個(gè)無(wú)符號(hào)的整數(shù)類型),c是整型參數(shù)(在函數(shù)里轉(zhuǎn)換到char):
    函數(shù)原型意義解釋
    size_t strlen(cs)求出cs的長(zhǎng)度
    char *strcpy(s,ct)把ct復(fù)制到s。要求s指定足夠大的字符數(shù)組
    char *strncpy(s,ct,n)把ct里的至多n個(gè)字符復(fù)制到s。要求s指定一個(gè)足夠大的字符數(shù)組。如果ct里的字符不夠n個(gè),就在s里填充空字符。
    char *strcat(s,ct)把ct里的字符復(fù)制到s里已有的字符串之后。s應(yīng)指定一個(gè)保存著字符串,而且足夠大的字符數(shù)組。
    char *strncat(s,ct,n)把ct里的至多n個(gè)字符復(fù)制到s里已有的字符串之后。s應(yīng)指定一個(gè)保存著字符串,而且足夠大的字符數(shù)組。
    int strcmp(cs,ct)比較字符串cs和ct的大小,在cs大于、等于、小于ct時(shí)分別返回正值、0、負(fù)值。
    int strncmp(cs,ct,n)比較字符串cs和ct的大小,至多比較n個(gè)字符。在cs大于、等于、小于ct時(shí)分別返回正值、0、負(fù)值。
    char *strchr(cs,c)在cs中查尋c并返回c第一個(gè)出現(xiàn)的位置,用指向這個(gè)位置的指針表示。當(dāng)cs里沒(méi)有c時(shí)返回值NULL
    char *strrchr(cs,c)在cs中查尋c并返回c最后一個(gè)出現(xiàn)的位置,沒(méi)有時(shí)返回NULL
    size_t strspn(cs,ct)由cs起確定一段全由ct里的字符組成的序列,返回其長(zhǎng)度
    size_t strcspn(cs,ct)由cs起確定一段全由非ct里的字符組成的序列,返回其長(zhǎng)度
    char *strpbrk(cs,ct)在cs里查尋ct里的字符,返回第一個(gè)滿足條件的字符出現(xiàn)的位置,沒(méi)有時(shí)返回NULL
    char *strstr(cs,ct)在cs中查尋串ct(查詢子串),返回ct作為cs的子串的第一個(gè)出現(xiàn)的位置,ct未出現(xiàn)在cs里時(shí)返回NULL
    char *strerror(n)返回與錯(cuò)誤編號(hào)n相關(guān)的錯(cuò)誤信息串(指向該錯(cuò)誤信息串的指針)
    char *strtok(s,ct)在s中查尋由ct中的字符作為分隔符而形成的單詞

    2.存儲(chǔ)區(qū)操作還有一組字符數(shù)組操作函數(shù)(存儲(chǔ)區(qū)操作函數(shù)),名字都以mem開(kāi)頭,以某種高效方式實(shí)現(xiàn)。在下面原型中,參數(shù)s和t的類型是(void *),cs和ct的類型是(const void *),n的類型是size_t,c的類型是int(轉(zhuǎn)換為unsigned char)。
    函數(shù)原型意義解釋
    void *memcpy(s,ct,n)從ct處復(fù)制n個(gè)字符到s處,返回s
    void *memmove(s,ct,n)從ct處復(fù)制n個(gè)字符到s處,返回s,這里的兩個(gè)段允許重疊
    int memcmp(cs,ct,n)比較由cs和ct開(kāi)始的n個(gè)字符,返回值定義同strcmp
    void *memchr(cs,c,n)在n個(gè)字符的范圍內(nèi)查尋c在cs中的第一次出現(xiàn),如果找到,返回該位置的指針值,否則返回NULL
    void *memset(s,c,n)將s的前n個(gè)字符設(shè)置為c,返回s

    七、功能函數(shù)(1.隨機(jī)數(shù)函數(shù):
    函數(shù)原型意義解釋
    int rand(void)生成一個(gè)0到RAND_MAX的隨機(jī)整數(shù)
    void srand(unsigned seed)用seed為隨后的隨機(jī)數(shù)生成設(shè)置種子值

    2.動(dòng)態(tài)存儲(chǔ)分配函數(shù):
    函數(shù)原型意義解釋
    void *calloc(size_t n, size_t size)分配一塊存儲(chǔ),其中足以存放n個(gè)大小為size的對(duì)象,并將所有字節(jié)用0字符填充。返回該存儲(chǔ)塊的地址。不能滿足時(shí)返回NULL
    void *malloc(size_t size)分配一塊足以存放大小為size的存儲(chǔ),返回該存儲(chǔ)塊的地址,不能滿足時(shí)返回NULL
    void *realloc(void *p, size_t size)將p所指存儲(chǔ)塊調(diào)整為大小size,返回新塊的地址。如能滿足要求,新塊的內(nèi)容與原塊一致;不能滿足要求時(shí)返回NULL,此時(shí)原塊不變
    void free(void *p)釋放以前分配的動(dòng)態(tài)存儲(chǔ)塊

    3.幾個(gè)整數(shù)函數(shù)幾個(gè)簡(jiǎn)單的整數(shù)函數(shù)見(jiàn)下表,div_t和ldiv_t是兩個(gè)預(yù)定義結(jié)構(gòu)類型,用于存放整除時(shí)得到的商和余數(shù)。div_t類型的成分是int類型的quot和rem,ldiv_t類型的成分是long類型的quot和rem。
    函數(shù)原型意義解釋
    int abs(int n)求整數(shù)的絕對(duì)值
    long labs(long n)求長(zhǎng)整數(shù)的絕對(duì)值
    div_t div(int n, int m)求n/m,商和余數(shù)分別存放到結(jié)果結(jié)構(gòu)的對(duì)應(yīng)成員里
    ldiv_t ldiv(long n, long m)同上,參數(shù)為長(zhǎng)整數(shù)

    4.數(shù)值轉(zhuǎn)換
    函數(shù)原型意義解釋
    double atof(const char *s)由串s構(gòu)造一個(gè)雙精度值
    int atoi(const char *s)由串s構(gòu)造一個(gè)整數(shù)值
    long atol(const char *s)由串s構(gòu)造一個(gè)長(zhǎng)整數(shù)值

    5.執(zhí)行控制1)非正常終止函數(shù)abort。原型是:?
    void abort(void);2)正常終止函數(shù)exit。原型是:
    void exit(int status);導(dǎo)致程序按正常方式立即終止。status作為送給執(zhí)行環(huán)境的出口值,0表示成功結(jié)束,兩個(gè)可用的常數(shù)為EXIT_SUCCESS,EXIT_FAILURE。
    3)正常終止注冊(cè)函數(shù)atexit。原型是:
    int atexit(void (*fcn)(void))可用本函數(shù)把一些函數(shù)注冊(cè)為結(jié)束動(dòng)作。被注冊(cè)函數(shù)應(yīng)當(dāng)是無(wú)參無(wú)返回值的函數(shù)。注冊(cè)正常完成時(shí)atexit返回值0,否則返回非零值。
    6.與執(zhí)行環(huán)境交互1)向執(zhí)行環(huán)境傳送命令的函數(shù)system。?原型是:
    int system(const char *s);把串s傳遞給程序的執(zhí)行環(huán)境要求作為系統(tǒng)命令執(zhí)行。如以NULL為參數(shù)調(diào)用,函數(shù)返回非0表示環(huán)境里有命令解釋器。如果s不是NULL,返回值由實(shí)現(xiàn)確定。
    2)訪問(wèn)執(zhí)行環(huán)境的函數(shù)getenv。原型是:
    char *getenv(const char *s);從執(zhí)行環(huán)境中取回與字符串s相關(guān)聯(lián)的環(huán)境串。如果找不到就返回NULL。本函數(shù)的具體結(jié)果由實(shí)現(xiàn)確定。在許多執(zhí)行環(huán)境里,可以用這個(gè)函數(shù)去查看“環(huán)境變量”的值。
    7.常用函數(shù)bsearch和qsort1)二分法查找函數(shù)bsearch:
    void *bsearch(const void *key, const void *base, size_t n, size_t size, int (*cmp)(const void *keyval, const void *datum));函數(shù)指針參數(shù)cmp的實(shí)參應(yīng)是一個(gè)與字符串比較函數(shù)strcmp類似的函數(shù),確定排序的順序,當(dāng)?shù)谝粋€(gè)參數(shù)keyval比第二個(gè)參數(shù)datum大、相等或小時(shí)分別返回正、零或負(fù)值。
    2)快速排序函數(shù)qsort:
    qsort對(duì)于比較函數(shù)cmp的要求與bsearch一樣。設(shè)有數(shù)組base[0],...,base[n-1],元素大小為size。用qsort可以把這個(gè)數(shù)組的元素按cmp確定的上升順序重新排列。
    void qsort(void *base, size_t n, size_t size, int (*cmp)(const void *, const voidC語(yǔ)言中,break和continue都是跳出循環(huán),有啥區(qū)別?
    單片機(jī)C語(yǔ)言編程:.H文件與.C文件的關(guān)系!
    深度剖析C語(yǔ)言的main函數(shù)
    PCB Layout的10個(gè)細(xì)節(jié),你不一定都知道!

  • 本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
    換一批
    延伸閱讀

    LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

    關(guān)鍵字: 驅(qū)動(dòng)電源

    在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

    關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

    LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

    關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

    根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

    關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

    電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

    關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

    在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

    關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

    LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

    關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

    在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

    關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

    開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

    關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

    LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

    關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
    關(guān)閉