2016-02-10 3 views
12

में संरचना प्रारंभिकरण Android AOSP कोड से कोड स्निपइप किया गया, Sensor.cpp कोड से नीचे है।सी ++

struct sensors_module_t HAL_MODULE_INFO_SYM = { 
    common: { 
     tag: HARDWARE_MODULE_TAG, 
     version_major: 1, 
     version_minor: 0, 
     id: SENSORS_HARDWARE_MODULE_ID, 
     name: "LGE Sensor module", 
     author: "LG Electronics Inc.", 
     methods: &sensors_module_methods, 
     dso: NULL, 
     reserved: {0} 
    }, 
    get_sensors_list: sensors__get_sensors_list, 
}; 

अब मैं यहाँ समझ में नहीं आता क्या करता है : यहाँ मतलब है? क्या यह किसी प्रकार का प्रारंभिकरण है या कुछ और?

मुझे सी ++ के बारे में बहुत कुछ पता नहीं है। इसलिए यदि इन चीजों को समझने के लिए कोई लिंक या संसाधन की सराहना की जाएगी। मैं इसके लिए googling द्वारा ज्यादा नहीं मिल सका।

+0

https://isocpp.org/tour सी ++ के लिए एक अच्छा परिचय है। एक एफएक्यू भी है, और आपको निश्चित रूप से https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md से C++ कोर दिशानिर्देशों को पढ़ना चाहिए। – Jens

उत्तर

12

यह एक कंपाइलर-विशिष्ट एक्सटेंशन है, नामित प्रारंभिक का एक अप्रचलित रूप है। जीसीसी कार्यान्वयन here दस्तावेज किया गया है।

सी में, आप हो सकता है:

struct point { int x, y; }; 
struct point p = { .x = 10, .y = 20 }; 

लेकिन C99 से पहले, जीसीसी एक ऐसी ही शुरू की:

struct point { int x, y; }; 
struct point p = { 10, 20 }; 
नामित प्रारंभकर्ता सुविधा, आईएसओ C99 में शुरू के साथ

, तो आप इस रूप में लिख सकते हैं एक अलग वाक्यविन्यास के साथ सुविधा:

struct point { int x, y; }; 
struct point p = { x: 10, y: 20 }; 

जीसीसी, या अधिक सटीक जी ++, सी ++ मीटर में इसका समर्थन करता है ओडीई भी, लेकिन सी ++ ने सी 99-शैली नामित प्रारंभिक शुरुआत नहीं की है।

जीसीसी मैनुअल का कहना है कि इस सुविधा का : संस्करण जीसीसी 2.5 के बाद अप्रचलित हो गया है, जिसे 1 99 3 में रिलीज़ किया गया था, इसलिए इसे निश्चित रूप से नए कोड में उपयोग नहीं किया जाना चाहिए।

ध्यान दें कि यदि प्रारंभिक मूल्य अपने उदाहरण के रूप में, एक छोटे पूर्णांक लगातार होने वाला:

version_major: 1, 
    version_minor: 0, 

इसकी आसानी से बिट क्षेत्रों के लिए वाक्य रचना के साथ भ्रमित।

सी .name = value फ़ॉर्म के लिए वैध और पोर्टेबल है, जब तक आपका कंपाइलर सी 99 या बाद में समर्थन करता है। सी ++ के लिए, यह पोर्टेबल नहीं है, लेकिन आप सी + सिंटैक्स का उपयोग तब तक कर सकते हैं जब तक आप g ++ या कंपाइलर जैसे क्लैंग का उपयोग कर रहे हों जो इसके साथ संगत है।