2014-02-25 93 views
1
ifdef _KERNEL__ 

1)KERNEL的__對編譯器意味着什麼?一些Linux內核C代碼

#define namei(pathname) __namei(pathname, LOOKUP_FOLLOW) 

2)這是什麼__namei?

#define FIBMP __IO(0x00, 1) 

3)這是什麼__IO?

#define pr_info(fmt, arg..) | 
printfk(KERN_INFO fmt, ##arg) 

4)這是什麼##?

回答

2

1)如果你有一個

#define __ something 

的地方,那麼它意味着什麼。
否則,it's只是名字_KERNEL__

2)這將只是__namei(pathname, LOOKUP_FOLLOW)替換每namei(pathname)的一部分。
後者是對代碼和參數中的某個函數的函數調用。

3)相同。替換每FIBMP__IO(0x00, 1)
這是一個函數或#define別的地方

4)是否有ARG後三點?然後它是一個可變的宏。 IE瀏覽器。
取代pr_info(a)printfk(KERN_INFO a)
printfk(KERN_INFO a, b)
取代pr_info(a, b)printfk(KERN_INFO a, b, c)
等取代pr_info(a, b, c)。如果沒有##,這將是
取代pr_info(a)printfk(KERN_INFO a,)
printfk(KERN_INFO a, b,)
取代pr_info(a, b)printfk(KERN_INFO a, b, c,)
更換pr_info(a, b, c)後面的逗號的區別是,它會導致編譯器錯誤。
只有在使用##時後面跟有參數時,逗號纔會出現。