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

このC構文はよくわかりません。私は構文の名前を知らないので検索することすらできません。あれは何でしょう?ドット(。)は構造体イニシャライザで何を意味しますか?

+0

構造体の初期化子のようです。 – Mysticial

+6

C99で標準化されているので、(実際には)古いコンパイラを使用していると動作しません。 –

+2

最後にこれに関するリンクが見つかりました:http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – Mysticial

答えて

103

これは、イニシャライザで構造体の特定のフィールドを名前で設定できるようにするC99の機能です。この前に、イニシャライザはすべてのフィールドの値だけを順番に格納する必要がありました。

したがって、次の構造体のために:

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

...かさえ:

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

...あなたは

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

...またはを使用することができます

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

...最後の2つはC99のみです。

13

designated initialisationとして知られています(Designated Initializers参照)。 「初期リスト」は、それぞれ「.」は、この場合名に 「fuse_oprations」構造体の特定のメンバーが 「hello_oper」識別子によって指定されたオブジェクトのために初期化する 「designator」です。

関連する問題