一、前言
本系列文章旨在總結(jié) C 語(yǔ)言基礎(chǔ)知識(shí)懦傍,包括 標(biāo)準(zhǔn)庫(kù)函數(shù)、疑難點(diǎn)分析芦劣、常用函數(shù)封裝粗俱、常用項(xiàng)目代碼塊 等。關(guān)于C標(biāo)準(zhǔn)示例見(jiàn) C語(yǔ)言教程 虚吟。
二寸认、標(biāo)準(zhǔn)庫(kù)
常用標(biāo)準(zhǔn)庫(kù)包含在如下頭文件中:
標(biāo)準(zhǔn)庫(kù) | 作用 | 標(biāo)準(zhǔn)庫(kù) | 作用 |
---|---|---|---|
<assert.h> | 斷言假設(shè) | <float.h> | 浮點(diǎn)值相關(guān)的依賴于 平臺(tái)的常量,增強(qiáng)可移植性 |
<math.h> | 各種數(shù)學(xué)函數(shù) | <stdarg.h> | 可變參數(shù)相關(guān) |
<stdlib.h> | 通用工具函數(shù) | <ctype.h> | 檢查字符的屬性 |
<limits.h> | 各種變量的限制大小 | <setjmp.h> | 承擔(dān)非局部標(biāo)號(hào)和goto作用 |
<stddef.h> | 定義標(biāo)準(zhǔn)宏以及類型 | <string.h> | 各種操作字符數(shù)組的函數(shù) |
<errno.h> | 定義了整數(shù)變量 errno | <locale.h> | 定義了特定地域的設(shè)置串慰, 比如日期格式和貨幣符號(hào) |
<signal.h> | 定義了程序執(zhí)行期間報(bào)告的 不同信號(hào)的函數(shù)和宏 |
<stdio.h> | 定義各種函數(shù)來(lái)執(zhí)行輸入和輸出 |
<time.h> | 定義操作日期和時(shí)間的函數(shù) |
三偏塞、C語(yǔ)言易錯(cuò)點(diǎn)
這里略作提及邦鲫,最好直接添加括號(hào)灸叼。
3.2、define定義函數(shù)
define 宏定義庆捺,常用來(lái)定義一些常量和函數(shù)古今,但是由于宏定義的特性,在定義函數(shù)時(shí)可能會(huì)出現(xiàn)一些問(wèn)題滔以,鏈接中以宏定義 MAX函數(shù)來(lái)做說(shuō)明沧卢。
本節(jié)包含指針的示例、地址運(yùn)算撬即、指針與數(shù)組的關(guān)系以及 函數(shù)指針 等示例立磁,詳見(jiàn)鏈接內(nèi)容
四、 GNU C編譯器擴(kuò)展語(yǔ)法
4.1剥槐、指定初始化
早期標(biāo)準(zhǔn) C 不支持指定初始化唱歧, GCC 編譯器就已經(jīng)支持指定初始化了,因?yàn)檫@個(gè)特性也被看做 GCC 編譯器的一個(gè)特性。包括: 指定初始化數(shù)組元素颅崩、支持'...'表示范圍擴(kuò)展几于、指定初始化結(jié)構(gòu)體成員
4.2、語(yǔ)句表達(dá)式
所謂語(yǔ)句表達(dá)式是指允許在一個(gè)表達(dá)式中內(nèi)嵌語(yǔ)句沿后,允許在表達(dá)式內(nèi)部使用局部變量沿彭、for循環(huán)和goto跳轉(zhuǎn)語(yǔ)句。特別在用于 #define宏定義 中表達(dá)復(fù)雜的結(jié)構(gòu)尖滚,其語(yǔ)句表達(dá)式的格式如下
({表達(dá)式1; 表達(dá)式2; 表達(dá)式3;})
4.3喉刘、typeof關(guān)鍵字
標(biāo)準(zhǔn) C 中定義了 sizeof 關(guān)鍵字,用來(lái)獲取一個(gè)變量或數(shù)據(jù)類型在內(nèi)存中所占的字節(jié)數(shù)漆弄。GNU C中擴(kuò)展了關(guān)鍵字 typeof 用于獲取一個(gè)變量或表達(dá)式的類型睦裳。
此關(guān)鍵字的主要作用是根據(jù)結(jié)構(gòu)體某一成員的地址撼唾,獲取這個(gè)結(jié)構(gòu)體的首地址廉邑。例如應(yīng)用場(chǎng)景:當(dāng)函數(shù)傳遞參數(shù)是結(jié)構(gòu)體的成員變量,但同時(shí)可能會(huì)使用此結(jié)構(gòu)體的其他成員變量倒谷,就可以通過(guò)此關(guān)鍵詞來(lái)實(shí)現(xiàn)鬓催。
4.5、零長(zhǎng)數(shù)組
零長(zhǎng)度數(shù)組經(jīng)常以變長(zhǎng)結(jié)構(gòu)體的形式出現(xiàn)恨锚,并不單用宇驾。在變長(zhǎng)結(jié)構(gòu)體中,零長(zhǎng)度數(shù)組不占用結(jié)構(gòu)體的存儲(chǔ)空間猴伶。
4.6课舍、屬性聲明
本章介紹使用 _attribute_ 來(lái)聲明一些函數(shù)、變量或類型的特殊屬性他挎,這主要用來(lái)指導(dǎo)編譯器在編譯程序時(shí)進(jìn)行特定方面的優(yōu)化或代碼檢查筝尾。屬性如 section、aligned办桨、packed筹淫、format、weak呢撞、alias损姜、noinline、always_inline...
4.7殊霞、可變參數(shù)宏
可變參數(shù)宏在內(nèi)核中主要用于日志打印摧阅。用于自定義模塊的日志定制
五、C語(yǔ)言的面向?qū)ο缶幊趟枷?/h3>
這里需要首先說(shuō)明的一點(diǎn)是:面向?qū)ο缶幊淌且环N編程思想绷蹲,和使用的語(yǔ)言工具沒(méi)有關(guān)系棒卷,只不過(guò)有些語(yǔ)言更適合面向?qū)ο缶幊坦四酢1竟?jié)主要涉及 C語(yǔ)言模擬實(shí)現(xiàn)類、鏈表的抽象和封裝比规、Linux內(nèi)核下的OOP思想...