मैं एक protobuf-c उदाहरण प्राप्त करने की कोशिश कर रहा हूं जो एक सी 0 9 0 कंपाइलर (एमएस वीएस2012) के साथ संकलित है।शून्य * सरणी * * (शून्य **) सदस्य + siz * (* p_n) का उद्देश्य क्या है;
Protobuf-सी स्रोत कोड के भीतर वहाँ दो C99 विशिष्ट चीजें हैं जो आसानी से C90 के साथ संगत होना करने के लिए बदला जा सकता है, एक गुंजाइश (not allowed in C90) और instantiation of structs.
-syntax के माध्यम से के बीच में यानी चर घोषणा (जैसे some_struct_type name = {.a=1,.b=2}
हैं)।
अब मैं एक संकलन त्रुटि के साथ अटक गया हूं। स्रोत फ़ाइल 'Protobuf-c.c' में संबंधित लाइन में लिखा है:
void *array = *(void **) member + siz * (*p_n);
कहाँ member
void *
और p_n
size_t *
के रूप में के रूप में परिभाषित है। और संबंधित त्रुटि
error C2036: 'void *' : unknown size
है कृपया ध्यान दें यह Protobuf-सी संस्करण 1.0.1 (respective source code देखते हैं, लाइन 2404 में) के लिए मान्य है। यह लाइन संस्करण 1.0.2 से
void *array = *(char **) member + siz * (*p_n);
this comment के साथ बदल दी गई है। तदनुसार लाइन बदलना संकलन त्रुटि को समाप्त करता है।
मेरे प्रश्न हैं:
- मैं कोड की इस पंक्ति को समझने के लिए चाहते हैं।
- क्या मैं
*(char **)
संस्करण पर स्विच कर सकता हूं? - त्रुटि संदेश मुझे क्या बता रहा है?
(किसी अन्य कारण से मैं करने के लिए छड़ी करना चाहते हैं Protobuf-सी 1.0.1 के लिए)
ऐसा लगता है कि यह मनुष्यों द्वारा अपठनीय होने के लिए डिज़ाइन किया गया है। :) – Almo
कुछ कंपाइलर्स हैं जो शून्य * कम से कम BYTE * के समान हैं, कम से कम सूचक अंकगणित में। यानी आकार (शून्य *) 1 तक संकलित करता है। मैं इस अव्यवस्था रेखा को इसके तत्वों में विभाजित करता हूं और पॉइंटर अंकगणितीय * के इस विशिष्ट उद्देश्य के लिए 'char *' * द्वारा 'शून्य *' को प्रतिस्थापित करता हूं। – harper
@harper कोड को पढ़ने के लिए क्या होगा यदि यह "de-cluttered" – georg