


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上本文主要講述c語言的一點基礎語法和在內(nèi)核的應用中其中的一點例子。#,#分別在c語言中是怎么作用?文章代碼編譯的環(huán)境:桌面環(huán)境:10.04內(nèi)核:2.6.32編譯器:gcc4.4.3一、基本的用法1、#.參數(shù)名以#作為前綴則結果將被擴展為由實際參數(shù)的帶引號的字符串。如:#define dprint(expr)printf(#expr"=%dn",expr);intmain()inta=20,b=10;dprint(a/b);return0;上面的例子會打印出:a/b=22、#.預處理器運算符#為宏提供了一種連接實際參數(shù)的手段。如果替換文本中的參數(shù)與#相
2、鄰,則該參數(shù)將被實際參數(shù)替換,#與前后的空白將被刪除,并對替換后的結果重新掃描。形成一個新的標號,如果這樣產(chǎn)生的記號無效,或者結果依賴于#運算順序,則結果沒有定義。如:#definepaste(front,back)front#back因此,宏調(diào)用paste(name,_xiaobai)的結果為name_xiaobai.如:#define createfun(name1,name2)void name1#name2()printf("%scalledn",_FUNCTION_);createfun(the,function);intmain()thefunction();r
3、eturn0;輸出的結果是:thefunctioncalled二、#可以嵌套嗎?看下面的例子:#define cat(x,y)x#y宏調(diào)用cat(var,123)講生成var123.但是,宏調(diào)用cat(cat(1,2),3)沒有定義:#阻止了外層調(diào)用的參數(shù)的擴展。因此,它將生成下列的記號串:cat(1,2)3.如果要再引入第二層的宏定義,如下定義:#define xcat(x,y)cat(x,y)那么xcat(xcat(1,2),3)將生成123, 這是因為xcat自身的擴展不包含#運算符。三、內(nèi)核中例子因為是做mips架構的,所以以mips為例子。Linux2.6.25內(nèi)核,include/
4、asm-mips/io.h文件??截愐徊糠值拇a出來。#define_BUILD_MEMORY_SINGLE(pfx,bwlq,type,irq)staticinlinevoidpfx#write#bwlq(typeval,volatilevoid_iomem*mem)volatiletype*_mem;type_val;_mem=(void*)_swizzle_addr_#bwlq(unsignedlong)(mem);_val=pfx#ioswab#bwlq(_mem,val);if(sizeof(type)!=sizeof(u64)|sizeof(u64)=sizeof(long)*_m
5、em=_val;/*在這里省略了一些代碼*/#define_BUILD_MEMORY_PFX(bus,bwlq,type)_BUILD_MEMORY_SINGLE(bus,bwlq,type,1)#defineBUILDIO_MEM(bwlq,type)_BUILD_MEMORY_PFX(_raw_,bwlq,type)_BUILD_MEMORY_PFX(,bwlq,type)_BUILD_MEMORY_PFX(_mem_,bwlq,type)BUILDIO_MEM(b,u8)BUILDIO_MEM(w,u16)BUILDIO_MEM(l,u32)BUILDIO_MEM(q,u64)跟蹤宏的展
6、開。BUILDIO_MEM(b,u8)BUILDIO_MEM(w,u16)BUILDIO_MEM(l,u32)BUILDIO_MEM(q,u64)就會生成了如下四個函數(shù):staticinlinevoidwriteb(u8val,volatilevoid_iomem*mem)staticinlinevoidwritew(u16val,volatilevoid_iomem*mem)staticinlinevoidwritel(u32val,volatilevoid_iomem*mem)staticinlinevoidwriteq(u64val,volatilevoid_iomem*mem)同時,如果當我們用函數(shù)類似writeb之類的出現(xiàn)了問題,一般情況下用編輯工具是找不到函數(shù)定義的,于是乎跟蹤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025汽車銷售公司銷售合同范例
- 2025標準室內(nèi)設計合同
- 2025 年租賃合同范本:房屋租賃合同
- 2025年合約經(jīng)理聘請合同調(diào)整
- 2025簽訂房屋買賣合同常見的注意事項
- 2025違反合同賠償規(guī)定解析
- 2025委托加工食品合同書范本
- 2025科技公司勞動合同范本
- 2025租房合同無效維修條款的應對策略
- 2025辦公空間租賃合同范本
- 環(huán)保材料使用管理規(guī)定
- 化學反應釜操作技能考核試卷
- 年產(chǎn)20萬噸碳酸鉀蒸發(fā)車間設計
- 招標代理服務服務方案
- JT-T-1230-2018機動車發(fā)動機冷卻液無機陰離子測定法離子色譜法
- JT-T-1051-2016城市軌道交通運營突發(fā)事件應急預案編制規(guī)范
- 被執(zhí)行人生活費申請書范文
- 起重機的維護保養(yǎng)要求與月度、年度檢查記錄表
- 江蘇省無錫江陰市四校2023-2024學年高一下學期期中聯(lián)考試卷
- 2024年鄭州鐵路職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- 家政服務平臺的綠色發(fā)展與可持續(xù)發(fā)展研究
評論
0/150
提交評論