2011-07-20 104 views
8

當我最近爲我的RAID設備打開一個相當老的驅動程序時出現了這個問題。爲了能夠編譯Linux系統的驅動程序,我開始調查所有輸出的錯誤。C結構語法問題

struct file_operations t3_fops = { 
     owner:     THIS_MODULE, 
     ioctl:     ft_ioctl, 
     fasync:     ft_fasync, 
     open:     ft_open, 
     release:    ft_release 
}; 

所以,球員,能不能幫我明白了什麼是「:」我在此kind語法的驅動程序源代碼中使用來是什麼意思?這是C語法嗎?我知道有一個字段定義,但這看起來與我不同。

回答

6

此初始化結構成員的語法稱爲designated initializer:是較舊的GCC特定語法。這在GCC manual中有記錄。

+0

我相信這是正確的答案:-)我仍然有一個問題:爲什麼沒有辦法分配**默認值**到C中的結構?如果我們可以在結構的定義中使用':'語法,那將非常方便。 – Stan

6

這是C99結構初始化語法。 owner, ioctl等是結構中字段的名稱,並且THIS_MODULEft_ioctl等是值。這是切實做好下列事項,除了在編譯時:

struct file_operations t3_fops; 
t3_fops.owner = THIS_MODULE; 
t3_fops.ioctl = ft_ioctl; 
... 

新的語法是好的,因爲它使初始化工作不管結構域的順序。

+5

在標準** 6.7.8初始化**中,我看不到':'語法,所以我認爲它是gcc的擴展。或者我想念它的內容?你能否指出標準提到的結構初始化語法':'?謝謝! – Stan

+0

對不起,我記得錯誤的語法。事實上冒號是gcc擴展名,'[owner] THIS_MODULE'是標準語法。 (我想,我現在無法訪問我的標準副本) – 2011-07-20 10:53:11