32-बिट, 16-बिट और 8-बिट सदस्य मानों से बना एक संरचना की कल्पना करना संभव है। जहां सदस्य मूल्यों का क्रम ऐसा होता है कि प्रत्येक सदस्य इसकी प्राकृतिक सीमा पर है।स्ट्रक्चर सदस्य संरेखण - क्या कोई पैडिंग
struct Foo
{
uint32_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint32_t e;
};
सदस्य संरेखण और गद्दी नियम विज़ुअल सी के लिए documented हैं ++। वीसी ++ पर आकार (फू) उपरोक्त संरचना अनुमानित रूप से "12" है।
अब, मुझे पूरा यकीन है कि नियम यह है कि पैडिंग और संरेखण के बारे में कोई धारणा नहीं की जानी चाहिए, लेकिन व्यावहारिक रूप से, अन्य ऑपरेटिंग सिस्टम पर अन्य कंपाइलर्स समान गारंटी देते हैं?
यदि नहीं, तो क्या जीसीसी पर "#pragma पैक (1)" के बराबर है?
सी में, 'फू', 'sizeof (Foo)' में घोषित नहीं किया गया है। अभिव्यक्ति एक त्रुटि है (जब तक कि 'Foo' को कहीं और परिभाषित नहीं किया जाता है)।मेरा सुझाव है कि आप बहु भाषा स्रोत फ़ाइलों को लिखने की कोशिश न करें: विपक्ष आपको मिलने वाले किसी भी समर्थक से कहीं अधिक बड़ा है। – pmg
@pmg: पेडेंट्री। :) 'typedef struct foo {...} Foo;' – Xeo
मेरा मानना है कि 'टाइपिफ़' सी ++ में अनावश्यक (और इसलिए बग का सुरक्षित रूप से हटाने योग्य स्रोत) है। मेरा मुद्दा बनी हुई है: बहु-भाषा स्रोत फ़ाइलों को लिखना इसके लायक से अधिक परेशानी है। – pmg