2011-11-08 76 views
78
static struct fuse_oprations hello_oper = { 
    .getattr = hello_getattr, 
    .readdir = hello_readdir, 
    .open = hello_open, 
    .read = hello_read, 
}; 

我不明白C語法。我甚至無法搜索,因爲我不知道語法的名字。那是什麼?dot(。)在結構體初始值設定項中的含義是什麼?

+0

它看起來像一個結構初始值設定項。 – Mysticial

+6

在C99中進行了標準化,所以如果你有一個(真的)舊的編譯器,就不會工作。 –

+2

終於找到了這個鏈接:http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – Mysticial

回答

103

這是一個C99功能,允許您在初始化程序中通過名稱設置結構的特定字段。在此之前,初始化程序需要按順序包含所有字段的值,當然這仍然有效。

所以以下結構:

struct demo_s { 
    int  first; 
    int  second; 
    int  third; 
}; 

...您可以使用

struct demo_s demo = { 1, 2, 3 }; 

...或:

struct demo_s demo = { .first = 1, .second = 2, .third = 3 }; 

...甚至:

struct demo_s demo = { .first = 1, .third = 3, .second = 2 }; 

...雖然最後兩個僅適用於C99。

13

其已知爲designated initialisation(參見Designated Initializers)。一個「初始化列表」,每個「.」是 「designator」在這種情況下名 「fuse_oprations」結構的特定成員初始化爲通過 的「hello_oper」標識符所指定的對象。

相關問題