शून्य लंबाई सरणियों सी में अनुमति नहीं है statically टाइप सरणियों एक निश्चित, गैर शून्य आकार एक निरंतर अभिव्यक्ति है कि होना चाहिए, और चर लंबाई-सरणियों एक आकार जो मूल्यांकन करता है गैर शून्य होनी चाहिए; सी 11 6.7.6.2/5:
हर बार [आकार अभिव्यक्ति] मूल्यांकन किया जाता है यह शून्य से अधिक
हालांकि एक मूल्य होगा, C99 और C11 एक लचीला सरणी की एक धारणा है एक struct के सदस्य:
struct foo
{
int a;
int data[];
};
सी 11 से, 6.7.21/18:
एक विशेष मामले के रूप में, एक से अधिक नाम वाले सदस्य के साथ संरचना का अंतिम तत्व में अपूर्ण सरणी प्रकार हो सकता है; इसे लचीला सरणी सदस्य कहा जाता है। ज्यादातर स्थितियों में, लचीला सरणी सदस्य को अनदेखा किया जाता है। विशेष रूप से, संरचना का आकार ऐसा लगता है कि लचीला सरणी सदस्य छोड़ा गया था, सिवाय इसके कि से अधिक पिछला पैडिंग हो सकता है, तो चूक का अर्थ होगा। हालांकि, जब .
(या ->
) ऑपरेटर के पास बाएं ऑपरेंड है जो (एक पॉइंटर) है जो एक लचीली सरणी सदस्य और दाएं ऑपरेंड नामों के साथ सदस्य है, तो ऐसा लगता है कि उस सदस्य को सबसे लंबे सरणी के साथ बदल दिया गया था (उसी तत्व प्रकार के साथ) जो ऑब्जेक्ट तक पहुंचने से संरचना को बड़ा नहीं बनायेगा;
स्रोत
2013-07-09 22:40:19
यह संकलन भी नहीं करना चाहिए, क्योंकि 'i' संकलन-समय स्थिर नहीं है। – Jashaszun
इसे संकलित करने का प्रयास करें; जीसीसी बाहर आ जाएगा, आपको पंच करेगा, आपको गोली मार देगा और आपकी कार चुराएगा। –
[दोस्तों ...यह सी 99 है ... सी 8 9 नहीं।] (http://ideone.com/NKtfJD) – Cornstalks