2011-03-16 14 views
6

मैं सी ++ में बहुत से Win32 प्रोग्रामिंग करता हूं और कई Win32 संरचनाओं में 'आकार' होता है (जिसे अक्सर cbSize या length कहा जाता है) सदस्य को पहले तत्व के रूप में प्रासंगिक API कॉल से पहले सेट करने की आवश्यकता होती है बनाया जा सकता है। उदाहरण के लिए:संरचना में पहला तत्व प्रारंभ करना

WINDOWPLACEMENT wp; 
wp.length = sizeof(WINDOWPLACEMENT); 
GetWindowPlacement(hWnd, &wp); 

अब, मुझे लगता है कि यह शून्य करने के लिए संरचना के सदस्यों प्रारंभ करने में जो मैं के साथ कर सकते अच्छा अभ्यास है:

WINDOWPLACEMENT wp = { }; 

या

WINDOWPLACEMENT wp = { 0 }; 

हालांकि, क्या करने के लिए होता संरचना के अन्य सदस्य यदि मैं इस तरह के पहले सदस्य को प्रारंभ करता हूं:

WINDOWPLACEMENT wp = { sizeof(WINDOWPLACEMENT) }; 

क्या वे स्वचालित रूप से शून्य में प्रारंभ हुए हैं? या यह इस बात पर निर्भर करता है कि मैं किस कंपाइलर का उपयोग कर रहा हूं और क्या यह एक डीबग बिल्ड है या नहीं?

उत्तर

11

हां, वे स्वचालित रूप से शून्य पर प्रारंभ हो जाते हैं।

8.5.1/7:

सूची में कम initializers से वहाँ कुल में सदस्यों, कर रहे हैं देखते हैं तो प्रत्येक सदस्य नहीं स्पष्ट रूप से प्रारंभ होगा मूल्य प्रारंभ (8.5) । [उदाहरण:

struct S { int a; char* b; int c; }; 
S ss = { 1, "asdf" }; 

1 के साथ ss.a initializes, "asdf", और प्रपत्र पूर्णांक (के अभिव्यक्ति के मूल्य के साथ ss.c साथ ss.b), वह यह है कि , 0.]

+0

+1।मैं इसके लिए खोज कर रहा था, लेकिन मैंने इसे उद्धृत किया: डी – Nawaz

0

यह:

WINDOWPLACEMENT wp = { X }; 

0 करने के लिए सभी शेष सदस्यों को प्रारंभ करेंगे (गधा उम पीओडी)।

देखें: 8.5.1 समुच्चय [dcl.init.aggr] अनुच्छेद: 7:

7 से वहाँ कुल में सदस्यों तो प्रत्येक सदस्य नहीं हैं, सूची में कम प्रारंभकर्ता-खंड नहीं हैं, तो स्पष्ट रूप से प्रारंभिक मूल्य-प्रारंभिक (8.5) होगा।

[उदाहरण:

struct S { int a; char* b; int c; }; 
    S ss = { 1, "asdf" }; 

"asdf", और प्रपत्र पूर्णांक की अभिव्यक्ति के मूल्य के साथ ss.c साथ 1 के साथ ss.a, ss.b initializes(), कि है, 0.-उदाहरण उदाहरण]

+1

स्पष्ट रूप से रोब पहले ही जानता है कि, वह पूछ रहा है कि 'विन्डोप्लामेंट डब्ल्यूपी = {आकार (विन्डोज़प्लामेंट)};' शेष सदस्यों को शून्य (यह करता है) शुरू करता है। –

1

यदि आप सुनिश्चित हैं कि आकार पहला तत्व है, तो यह ठीक रहेगा। प्रारंभिक में कोई भी मूल्य प्राप्त करने वाले किसी भी सदस्य को शून्य नहीं किया जाएगा। उद्धरण के लिए

संबंधित मुद्दे