**फंक्शन प्रोटोटाइप** (फॉरवर्ड डिक्लेरेशन) कंपाइलर को फंक्शन का सिग्नेचर (रिटर्न टाइप, पैरामीटर टाइप्स, काउंट) बताता है ताकि कॉल साइट पर चेकिंग हो सके।
क्यों जरूरी है
- कंपाइल-टाइम टाइप चेकिंग: आर्गुमेंट टाइप्स/काउंट मैच करते हैं।
- इम्प्लिसिट कन्वर्जन्स सक्षम:
func(3.14)जहांfunc(int)है। - फंक्शन को किसी भी क्रम में परिभाषित करने की अनुमति।
- रिकर्सिव/म्यूचुअल रिकर्सन फंक्शन्स के लिए आवश्यक।
बिना प्रोटोटाइप (चेतावनी के साथ)
#include <stdio.h>
int main() {
function(50); // इम्प्लिसिट डिक्लेरेशन int function()
}
void function(int x) { // वास्तविक: void, int
printf("x = %d\n", x);
}
// Warning: conflicting types for 'function'
प्रोटोटाइप के साथ (सही)
#include <stdio.h>
void function(int); // प्रोटोटाइप
int main() {
function(50); // चेक्ड: int आर्गुमेंट, void रिटर्न
}
void function(int x) {
printf("x = %d\n", x);
}
प्रोटोटाइप सिंटैक्स
| स्थिति | सिंटैक्स |
|---|---|
| कोई पैरामीटर नहीं | void func(void); |
| फिक्स्ड पैरामीटर्स | int func(int, double); |
| वेरिएडिक | int printf(const char*, ...); |
| पॉइंटर टू फंक्शन | void (*fp)(int); |
C vs C++
- C:
()का अर्थ "अनिर्दिष्ट पैरामीटर्स" (पुराना),(void)= "कोई पैरामीटर नहीं"। - C++:
()और(void)समान = "कोई पैरामीटर नहीं"।