क्या रजिस्टर करता है const char * const * नाम; मतलब है और इस चर समारोह के बाहर क्यों है? [डुप्लिकेट]

Jan 01 2021
void
usage (cpp)
    register const char *const *cpp;
{
    (void) fprintf (stderr, *cpp++, program_name, cvs_cmd_name);
    for (; *cpp; cpp++)
    (void) fprintf (stderr, *cpp);
    error_exit ();
}

मुझे नहीं पता कि क्यों रजिस्टर चर घुंघराले कोष्ठक के अंदर नहीं है और यह (शून्य) क्या है? इसके अलावा const char * const * cpp को रजिस्टर करें, मैंने पहले कभी ऐसा कुछ नहीं देखा

जवाब

6 JacobBlomquist Jan 01 2021 at 04:52

registerकीवर्ड संकलक करने के लिए एक संकेत है कि आप उस मूल्य प्रोसेसर पर एक समर्पित रजिस्टर में रखा जाना चाहते हैं। यह पढ़ने और लिखने में तेजी ला सकता है। आधुनिक संकलक के साथ, हालांकि, इस प्रकार का अनुकूलन न केवल अनावश्यक है, बल्कि अक्सर प्रतिकूल भी है।

फ़ंक्शन डिक्लेरेशन और ब्लॉक के बीच का कारण यह है कि पुराने c (प्री C90) में आप पैरामीटर के बगल में पैरामीटर प्रकार की घोषणा नहीं करेंगे, लेकिन फ़ंक्शन और ब्लॉक की घोषणा के बीच।

उदाहरण के लिए:

int main(argc, argv)
char ** argv;
{
 ...
}

ध्यान दें कि मैंने कुछ भी नहीं किया argcक्योंकि अगर आप स्पष्ट रूप से इसे परिभाषित करने के लिए एक प्रकार को परिभाषित नहीं करते हैं।

आपको लगता है कि आप इसे अधिक बार देखेंगे। जब मैं FFMPEG पर काम करता था तो मैं इस समूह में चला जाता था।

(शून्य) कच्चा माल अप्रयुक्त पैरामीटर चेतावनियों / त्रुटियों को रोकता है। जब एक लो-लेवल कॉलबैक फ़ंक्शन के साथ पोर्टआडियो पर काम कर रहा हूं, तो मैंने इसमें भाग लिया है।

13 SamVarshavchik Jan 01 2021 at 04:26

आपके द्वारा "इससे पहले कभी नहीं देखा गया" का कारण यह है कि यह मूल, ऐतिहासिक, के और आर सी संस्करण के वाक्यविन्यास का उपयोग कर रहा है । वह कुछ वास्तविक, पुराना C कोड होना चाहिए जिसे आप देख रहे हैं। मैंने अभी-अभी देखा, और 1990 में ANSI C (C90) निकला, इसलिए यह कोड कम से कम 30 साल या इससे अधिक पुराना होना चाहिए।

मुझे लगता है कि यह कुछ ऐसा है जिसे ज्ञात करने की आवश्यकता है यदि किसी को ऐतिहासिक सी कोड से निपटने की आवश्यकता है, लेकिन अन्यथा आप इसे भूल सकते हैं।

(void)डाली एक ही बात यह आज का मतलब है इसका मतलब है।