यदि फंक्शन प्रोटोटाइप के बिना कॉल किया जाता है और उसकी डेफिनिशन बाद में आती है, तो C (C89/C90) **इम्प्लिसिट डिक्लेरेशन** मान लेता है: int func()।
समस्या
#include <stdio.h>
int main() {
printf("Returned: %d\n", function()); // इम्प्लिसिट int function()
}
char function() { // वास्तविक रिटर्न टाइप char
return 'T';
}
आउटपुट (एरर)
[Error] conflicting types for 'function' [Note] previous implicit declaration of 'function' was here
सही: रिटर्न टाइप int मैच करता है
#include <stdio.h>
int main() {
printf("Returned: %d\n", function()); // इम्प्लिसिट int - मैच करता है
}
int function() { // वास्तविक रिटर्न int
return 86;
}
आउटपुट
Returned: 86
समाधान: फंक्शन प्रोटोटाइप
#include <stdio.h>
char function(); // प्रोटोटाइप - कंपाइलर को सिग्नेचर बताता है
int main() {
printf("Returned: %c\n", function()); // सही: %c के साथ
return 0;
}
char function() {
return 'T';
}
मुख्य बिंदु
- C99 और बाद में: इम्प्लिसिट डिक्लेरेशन **हटा दिया गया** - कंपल्सरी प्रोटोटाइप।
- C++: हमेशा प्रोटोटाइप आवश्यक (इम्प्लिसिट डिक्लेरेशन कभी नहीं था)।
- सर्वोत्तम अभ्यास: हेडर फाइल में प्रोटोटाइप्स रखें, या फंक्शन को उपयोग से पहले डिफाइन करें।