सी में फ़ंक्शन कॉल को प्रोटोटाइप दिखाई देने की आवश्यकता नहीं है लेकिन इसकी अत्यधिक अनुशंसा की जाती है कि एक सही प्रोटोटाइप गुंजाइश में है।
इसका कारण यह है कि यदि फ़ंक्शन परिभाषा डिफ़ॉल्ट फ़ंक्शन तर्क प्रचार के बाद फ़ंक्शन तर्कों के प्रकार से मेल नहीं खाती है तो आपको अपरिभाषित व्यवहार प्राप्त होने की अत्यधिक संभावना होती है।
सही प्रोटोटाइप दृश्यमान होने का मतलब है कि संकलक फ़ंक्शन कॉल के तर्कों की जांच कर सकता है और प्रोग्रामर को चेतावनी देता है कि कोई मेल नहीं है।
सी कार्यों को अधिभारित करने की अनुमति नहीं देता है ताकि आपके पास किसी भी फ़ंक्शन नाम के लिए केवल एक प्रोटोटाइप हो।
डिफ़ॉल्ट तर्क प्रचार अप्रत्याशित विसंगतियों का कारण बन सकता है।
उदा।
int main(int argc, char **argv)
{
short s = 5;
float f = 2.3f;
x(s, f); // x implicitly declared; default argument promotions performed
return 0;
}
int x(short t, float g) // Error: called with an int and a double
{
return (int)(t + g);
}
समारोह कॉल में, क्योंकि x
नहीं दिखाई प्रोटोटाइप (अभी तक) है, s
int
और f
करने के लिए प्रोत्साहित किया जाएगा double
करने के लिए प्रोत्साहित किया जाएगा। ये डिफ़ॉल्ट तर्क प्रचार हैं। यह तो एक बेमेल जब समारोह एक प्रोटोटाइप है कि एक short
और एक float
लेता है, भले ही इन तर्कों कि में पारित किए गए के मूल प्रकार के होते हैं के साथ परिभाषित किया गया है कारण बनता है।
कार्य है कि बहस के परिवर्तनशील ले (यानी उपयोग , ...
वाक्यविन्यास) उस बिंदु पर हमेशा एक दृश्य प्रोटोटाइप होना चाहिए जिस पर उन्हें बुलाया जाता है।
स्रोत
2011-02-06 16:39:40
जहां आपने टिप्पणी की है संकलन त्रुटि का कारण नहीं होगा। 'function_x(); 'निश्चित रूप से' function_x();' को एक इंटोटोटाइप फ़ंक्शन के रूप में 'int' लौटाएगा। यह एक त्रुटि है कि फ़ंक्शन को बाद में 'शून्य' लौटने के रूप में घोषित किया जाता है। –