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

मुझे यह सी वाक्यविन्यास अच्छी तरह से समझ में नहीं आता है। मैं खोज भी नहीं कर सकता क्योंकि मुझे वाक्यविन्यास का नाम नहीं पता है। वह क्या है?स्ट्रॉट प्रारंभकर्ता में डॉट (।) का क्या अर्थ है?

+0

यह एक संरचना प्रारंभकर्ता की तरह दिखता है। – Mysticial

+6

सी 99 में मानकीकृत, तो अगर आपके पास (वास्तव में) पुराना कंपाइलर है तो काम नहीं करेगा। –

+2

अंततः इसके लिए लिंक मिला: http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – Mysticial

उत्तर

103

यह एक सी 99 सुविधा है जो आपको प्रारंभिक में नाम से संरचना के विशिष्ट फ़ील्ड सेट करने की अनुमति देती है। इससे पहले, प्रारंभकर्ता को सभी क्षेत्रों के लिए केवल मूल्यों को शामिल करने की आवश्यकता होती थी - जो अभी भी काम करता है।

निम्नलिखित struct के लिए

तो:

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 }; 

... हालांकि अंतिम दो केवल सी 99 के लिए हैं।

13

इसे designated initialisation के रूप में जाना जाता है (Designated Initializers देखें)। एक "प्रारंभकर्ता-सूची", प्रत्येक '.' एक "designator" जो इस मामले में नाम 'fuse_oprations' struct के एक विशेष सदस्य 'hello_oper' पहचानकर्ता द्वारा नामित वस्तु के लिए प्रारंभ करने में है।