"Char s[static 10]" जैसे फ़ंक्शन के सरणी पैरामीटर में स्थिर कीवर्ड का उद्देश्य क्या है?



arrays parameters (1)

कुछ स्रोत कोड ब्राउज़ करते समय मैं इस तरह के एक समारोह में आया:

void someFunction(char someArray[static 100])
{
    // do something cool here
}

कुछ प्रयोगों के साथ ऐसा लगता है कि अन्य क्वालीफायर भी वहां दिखाई दे सकते हैं:

void someFunction(char someArray[const])
{
    // do something cool here
}

ऐसा लगता है कि क्वालीफायर केवल [ ] अंदर अनुमति दी जाती है जब सरणी को फ़ंक्शन के पैरामीटर के रूप में घोषित किया जाता है। ये क्या करते हैं फ़ंक्शन पैरामीटर के लिए यह अलग क्यों है?


पहली घोषणा संकलक को someArray है कि कुछ someArray कम से कम 100 तत्व लंबे होते हैं। इसका उपयोग अनुकूलन के लिए किया जा सकता है। उदाहरण के लिए इसका मतलब यह भी है कि कुछ someArray कभी नहीं होते हैं।

ध्यान दें कि सी मानक को संकलक को कॉल करने की आवश्यकता नहीं होती है जब फ़ंक्शन को कॉल इन आवश्यकताओं को पूरा नहीं करता है (यानी यह चुप अपरिभाषित व्यवहार है)।

दूसरी घोषणा केवल कुछ someArray (कुछ someArray के तत्व नहीं!) को someArray रूप में घोषित someArray , यानी आप कुछ someArray=someOtherArray नहीं लिख सकते हैं। यह वही है जैसे पैरामीटर char * const someArray

यह वाक्यविन्यास केवल फ़ंक्शन पैरामीटर सूची में सरणी घोषणाकर्ता के सबसे निचले [] के भीतर प्रयोग योग्य है, यह अन्य संदर्भों में समझ में नहीं आता है।

मानक पाठ, जो उपरोक्त दोनों मामलों को कवर करता है, सी 11 6.7.6.3/7 (सी 99 में 6.7.5.3/7 था) में है:

"प्रकार की सरणी" के रूप में पैरामीटर की घोषणा को 'योग्य पॉइंटर टाइप करने के लिए' 'में समायोजित किया जाएगा, जहां टाइप क्वालीफायर (यदि कोई है) वे सरणी प्रकार व्युत्पन्न के [ और ] के भीतर निर्दिष्ट हैं। यदि कीवर्ड स्थिर भी सरणी प्रकार व्युत्पन्न के [ और ] के भीतर प्रकट होता है, तो प्रत्येक कॉल के लिए फ़ंक्शन पर, संबंधित वास्तविक तर्क का मान किसी सरणी के पहले तत्व तक पहुंच प्रदान करेगा, जिसमें कम से कम कई तत्व निर्दिष्ट किए गए हैं आकार अभिव्यक्ति द्वारा।





static