पहला घोषणा संकलक को बताता someArray
है जो कम से कम 100 तत्व लंबा है। यह अनुकूलन के लिए इस्तेमाल किया जा सकता है। उदाहरण के लिए, यह भी मतलब है कि someArray
कभी नहीं है NULL
।
ध्यान दें कि जब फ़ंक्शन को कॉल इन आवश्यकताओं को पूरा नहीं करता है, तो सी मानक को संकलक की आवश्यकता नहीं है (यानी, यह चुप अपरिभाषित व्यवहार है)।
दूसरी घोषणा केवल कांस्टेबल के रूप में घोषित की गई है someArray
( someArray
तत्व नहीं!), यानी आप लिख नहीं सकते someArray=someOtherArray
। यह वैसा ही है जैसे कि पैरामीटर था char * const someArray
।
यह वाक्य विन्यास केवल अंतरतम के भीतर प्रयोग करने योग्य है []
एक फ़ंक्शन पैरामीटर सूची में एक सरणी के के ; अन्य संदर्भों में इसका कोई अर्थ नहीं होगा।
मानक पाठ, जिसमें उपरोक्त दोनों मामले शामिल हैं, C11 6.7.6.3/7 (C99 में 6.7.5.3/7 था):
'' प्रकार की सरणी '' के रूप में एक पैरामीटर की घोषणा को '' योग्य पॉइंटर टू टाइप '' में समायोजित किया जाएगा, जहां टाइप क्वालिफायर (यदि कोई हो) सरणी प्रकार के व्युत्पत्ति के भीतर [
और भीतर निर्दिष्ट किए गए हैं ]
। कीवर्ड स्थिर भी दिखाया जाता है [
और]
सरणी प्रकार व्युत्पत्ति की, तो कार्य करने के लिए प्रत्येक कॉल के लिए, इसी वास्तविक तर्क का मूल्य एक सरणी के पहले तत्व के उपयोग के साथ कई तत्वों के रूप में कम से कम के रूप में द्वारा निर्दिष्ट प्रदान करेगा आकार अभिव्यक्ति।
int foo(struct bar [static 1]);
केint foo(struct bar *);
रूप में उपयोग करने के लिए बेहतर माना जाना चाहिए जो NULL पॉइंटर्स को स्वीकार नहीं करते हैं। (मुझे पता है कि gcc के पास ऐसे कार्यों को चिह्नित करने के लिए एक वैकल्पिक अमानक सिंटैक्स है ताकि कंपाइलर चेतावनी दे सके ..)