फ़ंक्शन क्या है?
एक फ़ंक्शन एक स्व-निहित ब्लॉक है जो एक विशिष्ट कार्य करता है।
फ़ंक्शन के लाभ
- पुन: उपयोगिता (Reusability)
- प्रोग्राम लंबाई कम करता है
- त्रुटि स्थानांतरण आसान
- टॉप-डाउन मॉड्यूलर प्रोग्रामिंग की सुविधा
रिटर्न मान
- गणनाओं में, हम आमतौर पर एक फ़ंक्शन से मान वापस करने की अपेक्षा करते हैं
- यह मान
int,float,charया कुछ भी हो सकता है - फ़ंक्शन का डिफ़ॉल्ट रिटर्न टाइप
intहै
उदाहरण 1: सरल फ़ंक्शन
#include <stdio.h>
void myFunc(); // प्रोटोटाइप
int main() {
myFunc();
return 0;
}
void myFunc() {
printf("Hello\n");
}
उदाहरण 2: रिटर्न मान के साथ फ़ंक्शन
int total() {
int a = 10, b = 20, c;
c = a + b;
return c; // c का मान लौटाता है (30)
}
आउटपुट
30
दो चरणों के बजाय:
c = a + b;
return c;
एकल चरण में लिख सकते हैं:
return a + b;
महत्वपूर्ण बिंदु
- यदि आप फ़ंक्शन में मान वापस करना भूल जाते हैं, तो अधिकांश C कंपाइलर चेतावनी देते हैं
- चेतावनी प्रोग्राम निष्पादन नहीं रोकती, लेकिन त्रुटि रोकती है
main() फ़ंक्शन का रिटर्न
int main() {
// ...
return 0; // सफल समाप्ति
}
एक पूर्णांक प्रकार के लिए डिफ़ॉल्ट रिटर्न मान 0 है। यदि आप main() में return 0 या कोई अन्य मान नहीं डालते हैं, तो 0 स्वचालित रूप से वापस कर दिया जाता है (C99 मानक)।
फ़ंक्शन से वापसी
एक फ़ंक्शन return स्टेटमेंट के माध्यम से एकल मान लौटाता है।
- यदि फ़ंक्शन के अंदर चरों में परिवर्तन किए जाते हैं, तो वे उस फ़ंक्शन के लिए स्थानीय होते हैं। कॉलिंग फ़ंक्शन के चर कॉल किए गए फ़ंक्शन की क्रियाओं से प्रभावित नहीं होते
- कॉलिंग फ़ंक्शन कॉल किए गए फ़ंक्शन द्वारा लौटाए गए मान को अनदेखा करना चुन सकता है। उदाहरण के लिए,
printfऔरscanfरिटर्न मान आमतौर पर अनदेखे किए जाते हैं - फ़ंक्शन द्वारा लौटाया गया मान अधिक जटिल अभिव्यक्ति में उपयोग किया जा सकता है, या किसी चर को असाइन किया जा सकता है
व्यावहारिक उदाहरण
1. एकाधिक मान वापस करना (पॉइंटर्स के माध्यम से)
void divide(int a, int b, int *quotient, int *remainder) {
*quotient = a / b;
*remainder = a % b;
}
int main() {
int q, r;
divide(17, 5, &q, &r);
printf("भागफल: %d, शेषफल: %d\n", q, r); // 3, 2
}
2. संरचना वापस करना
struct Point {
int x, y;
};
struct Point midpoint(struct Point p1, struct Point p2) {
struct Point mid;
mid.x = (p1.x + p2.x) / 2;
mid.y = (p1.y + p2.y) / 2;
return mid; // संरचना वापस
}
3. सरणी वापस करना (पॉइंटर के माध्यम से)
// सरणी सीधे वापस नहीं की जा सकती, पॉइंटर वापस करें
int* createArray(int n, int value) {
int *arr = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) arr[i] = value;
return arr; // कॉलर को free() करना होगा
}
4. रिटर्न मान की जांच
FILE *fp = fopen("file.txt", "r");
if (fp == NULL) { // रिटर्न मान जांचें!
perror("फ़ाइल खोलने में विफल");
return 1;
}
सर्वोत्तम अभ्यास
- हमेशा फ़ंक्शन प्रोटोटाइप में रिटर्न टाइप घोषित करें
- सफलता/विफलता इंगित करने के लिए सार्थक मान लौटाएं
- महत्वपूर्ण फ़ंक्शन कॉल्स के रिटर्न मान जांचें
voidरिटर्न टाइप का उपयोग करें जब कोई मान वापस न करना हो- बड़े ऑब्जेक्ट्स के लिए, पॉइंटर/संरचना द्वारा वापस करने पर विचार करें