'द सी प्रोग्रामिंग लैंग्वेज(द्वितीय)' में 71~72p,

दूसरा, और उतना ही महत्वपूर्ण, कॉलिंग रूटीन को पता होना चाहिए कि atof एक गैर-इंट मान लौटाता है। इसे सुनिश्चित करने का एक तरीका कॉलिंग रूटीन में स्पष्ट रूप से atof घोषित करना है।

और उपरोक्त भाग सहित पैराग्राफ के ठीक नीचे कोड।

#include <stdio.h>

#define MAXLINE 100

/* rudimentary calculator */
main()
{
    double sum, atof(char []);
    char line[MAXLINE];
    int getline(char line[], int max);

    sum = 0;
    while (getline(line, MAXLINE) > 0)
        printf("\t%g\n", sum += atof(line));
    return 0;
}

एक फ़ंक्शन प्रोटोटाइप को सामान्य रूप से शीर्ष पर घोषित किया जाता है। लेकिन फंक्शन प्रोटोटाइप double atof(char[]) को main() में क्यों घोषित किया जाता है? मैंने ऐसा कभी नहीं देखा, हालांकि मैं नौसिखिया हूं।

1
op ol 16 नवम्बर 2020, 13:03

1 उत्तर

सबसे बढ़िया उत्तर

सी के शुरुआती संस्करणों में शुरुआत के लिए आप फ़ंक्शन कॉल से पहले इसे घोषित किए बिना फ़ंक्शन को कॉल कर सकते हैं। इस मामले में डिफ़ॉल्ट रूप से यह माना जाता था कि फ़ंक्शन में रिटर्न प्रकार int है।

इस बात पर ध्यान दें कि सामान्य तौर पर एक फंक्शन डिक्लेरेशन जरूरी नहीं कि फंक्शन प्रोटोटाइप प्रदान करे।

इन दो फ़ंक्शन घोषणाओं की तुलना करें

int f();

तथा

int f( void );

पहली फ़ंक्शन घोषणा का अर्थ है कि आप फ़ंक्शन पैरामीटर की संख्या और प्रकारों के बारे में कुछ नहीं कह सकते हैं।

दूसरी घोषणा वास्तव में एक फ़ंक्शन प्रोटोटाइप है जिसका अर्थ है कि फ़ंक्शन में पैरामीटर नहीं हैं।

इसलिए यदि किसी प्रोग्राम में कोई फ़ंक्शन कॉल है और आप एक पुराने कंपाइलर का उपयोग कर रहे हैं तो यह माना जाता है कि फ़ंक्शन का रिटर्न प्रकार int है।

कंपाइलर को यह कहने के लिए कि फ़ंक्शन का एक अलग रिटर्न प्रकार है, आपको फ़ंक्शन कॉल से पहले फ़ंक्शन को घोषित करने की आवश्यकता है।

आप फ़ाइल स्कोप में या उस ब्लॉक स्कोप में फ़ंक्शन घोषित कर सकते हैं जिसमें फ़ंक्शन कहा जाता है।

यह समारोह घोषणा

double sum, atof(char []);
^^^^^^      ^^^^^^^^^^^^^^

उसी समय फ़ंक्शन प्रोटोटाइप को मुख्य के बाहरी ब्लॉक दायरे में रखा जाता है, हालांकि आप इसे मुख्य से पहले रख सकते हैं। अंतिम मामले में फ़ंक्शन प्रोटोटाइप पूरे मॉड्यूल के लिए दृश्यमान होगा।

फ़ंक्शन को घोषित करना अधिक सही होगा जैसे

double atof( const char [] );

क्योंकि आमतौर पर ऐसा फ़ंक्शन पारित स्ट्रिंग को तर्क के रूप में नहीं बदलता है।

यह भी ध्यान रखें कि हेडर <stdlib.h> में घोषित समान नाम वाला एक मानक C फ़ंक्शन है।

double atof(const char *nptr);
1
Vlad from Moscow 16 नवम्बर 2020, 13:19