《Linux4.0设备驱动开发详解》笔记--第三章:Linux下的C编程特点
生活随笔
收集整理的這篇文章主要介紹了
《Linux4.0设备驱动开发详解》笔记--第三章:Linux下的C编程特点
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
3.1 Linux編碼風(fēng)格
- 參考文章:Documentation/CodingStyle
- 縮進(jìn)用TAB
- {}使用:
- 對于結(jié)構(gòu)體、if、for、while以及switch語句,“{”不另起一行
- 如果if、for循環(huán)后只有1行,不要加“{”和“}”
- if和else混合用的時(shí)候,else語句不另起一行
- 對于函數(shù),“{”另起一行
- switch和case對齊
3.2 GNU C與ANSI C
- 零長度和變量長度數(shù)組
- case范圍:支持case x … y這樣的語法,區(qū)間[x,y]中的數(shù)都會(huì)滿足這個(gè)case條件
- 語句表達(dá)式:包含在括號里的語句看成一個(gè)表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式的地方。
- typeof關(guān)鍵字:其可以獲得x的類型,因此可以借助typedef來定義min這個(gè)宏
- 可變參數(shù)宏,標(biāo)準(zhǔn)C就支持可變參數(shù)函數(shù),意味著函數(shù)的參數(shù)是不固定的,如printf()函數(shù),GNU C 中宏也可以接受可變參數(shù)目的參數(shù),如
這里的arg表示其余的參數(shù),可以是零個(gè)或多個(gè),##是為了處理arg不代表任何參數(shù)的情況,這時(shí)候前面的逗號就顯得多余了,使用##之后,CNU C 就會(huì)預(yù)處理會(huì)丟掉前面的逗號,這樣
pr_debug("success!\n"); 擴(kuò)展為: printk("success!\n");- 標(biāo)號元素:允許數(shù)組和結(jié)構(gòu)體的元素初始化的順序任意順序出現(xiàn)。
數(shù)組初始化方式為在初始化值前添加”[INDEX]=”,或者用”[FIRST … LAST]=”的形式指定一個(gè)范圍。
結(jié)構(gòu)體初始化方式
struct file_operations ext2_file_operation = {.llseek = generic_file_llseek,.read = generic_file_read,... };- 當(dāng)前函數(shù)名:FUNCTION或者func保存當(dāng)前函數(shù)的名字
- 特殊屬性聲明:GUN C允許申明函數(shù)、變量和類型的特殊屬性,以便手動(dòng)優(yōu)化和定制代碼檢查的方法,申明方法:在申明后加上attribute((ATTRIBUTE)). ATTRIBUTE為屬性說明,若存在多個(gè)則逗號隔開。
- 內(nèi)建函數(shù):不屬于標(biāo)準(zhǔn)庫的內(nèi)建函數(shù)通常以__builtin開始
- do{} while語句:其主要用于宏定義中,為了保證宏定義的使用者不會(huì)出現(xiàn)編譯錯(cuò)誤,他不對其他使用則做任何假設(shè)。
- goto語句:一般只限于錯(cuò)誤處理中
轉(zhuǎn)載于:https://www.cnblogs.com/zcjboke/p/5513138.html
總結(jié)
以上是生活随笔為你收集整理的《Linux4.0设备驱动开发详解》笔记--第三章:Linux下的C编程特点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 之Single Num
- 下一篇: 内存管理之slab分配器