- 1 1. C भाषा मा आर्ग्युमेन्टको आधारभूत
- 2 2. वास्तविक तर्क र औपचारिक तर्कको भिन्नता
- 3 3. आर्गुमेन्ट पास गर्ने तरिका
- 4 4. आर्गुमेन्टको संख्या र रिटर्न मानको संयोजन
- 5 5. पुनरावर्ती कल र आर्गुमेन्टहरू
- 6 6. कार्यात्मक म्याक्रोहरू र तर्कहरू
- 7 7. C भाषा को मानक लाइब्रेरीमा कार्यहरू र तर्कहरू
- 8 8. सारांश
- 9 9. आर्गुमेन्टसँग सम्बन्धित उन्नत प्रविधिहरू
- 10 10. कार्यको तर्कहरू र स्मृति व्यवस्थापन
1. C भाषा मा आर्ग्युमेन्टको आधारभूत
आर्ग्युमेन्ट भनेको
आर्ग्युमेन्ट भनेको, फलामलाई कल गरिँदा बाहिरबाट फलाममा पास गरिने डेटा हो। आर्ग्युमेन्ट प्रयोग गरेर, फलाम विभिन्न मानहरू इनपुटको रूपमा प्राप्त गर्छ र त्यसको आधारमा प्रक्रिया गर्न सक्छ। C भाषामा आर्ग्युमेन्टको प्रयोगलाई मास्टर गर्नु प्रोग्रामको पुन: प्रयोगयोग्यता र लचिलोपन बढाउन आवश्यक छ।
वास्तविक आर्ग्युमेन्ट र औपचारिक आर्ग्युमेन्ट
फलामलाई कल गर्ने पक्षले प्रदान गर्ने मानलाईवास्तविक आर्ग्युमेन्ट, फलामको परिभाषा भित्र प्राप्त हुने मानलाईऔपचारिक आर्ग्युमेन्ट भनिन्छ। उदाहरणका लागि, PrintScore(score);
मा score
वास्तविक आर्ग्युमेन्ट हो, र void PrintScore(int score)
को score
औपचारिक आर्ग्युमेन्ट हो। फलामलाई सही रूपमा प्रयोग गर्न, वास्तविक आर्ग्युमेन्ट र औपचारिक आर्ग्युमेन्टको भिन्नता बुझ्नु महत्त्वपूर्ण छ।
2. वास्तविक तर्क र औपचारिक तर्कको भिन्नता
वास्तविक तर्क
वास्तविक तर्क भनेको, फलनलाई कल गर्दा वास्तविक रूपमा पास गरिने मान हो। उदाहरणका लागि、PrintScore(100);
मा、100
वास्तविक तर्क हो। वास्तविक तर्क फलनमा पास गरिन्छ र त्यो फलनभित्र प्रयोग गरिन्छ।
औपचारिक तर्क
औपचारिक तर्क भनेको, फलन परिभाषामा प्राप्त हुने डेटा को अस्थायी नाम हो। औपचारिक तर्क फलनभित्र वास्तविक तर्कको मानलाई सन्दर्भ गर्छ, तर फलनको बाहिरबाट त्यो मानलाई परिवर्तन गर्न सकिँदैन। उदाहरणका लागि、void PrintScore(int score)
कोscore
औपचारिक तर्क हो।
3. आर्गुमेन्ट पास गर्ने तरिका
मान पास
मान पास भनेको, वास्तविक आर्गुमेन्टको मानलाई औपचारिक आर्गुमेन्टमा प्रतिलिपि गर्ने विधि हो। यस अवस्थामा, कार्यभित्र औपचारिक आर्गुमेन्टको मान परिवर्तन गरे पनि, कल गर्ने पक्षको वास्तविक आर्गुमेन्टमा प्रभाव पर्दैन। तलको उदाहरण हेर्नुहोस्।
void LevelUp(int lv) {
lv++;
}
int main() {
int level = 1;
LevelUp(level);
printf("स्तर: %dn", level); // आउटपुट: Level: 1
}
यस उदाहरणमा、LevelUp
कार्यभित्र lv
बृद्धि हुन्छ, तर main
कार्यको level
मा प्रभाव पर्दैन। मान पासको फाइदा भनेको कल गर्ने पक्षको डेटा सुरक्षित गर्न सक्नु हो, तर ठूलो डेटा पास गर्दा स्मृति प्रयोग बढ्ने कुरा ध्यान दिनु आवश्यक छ।
प्वाइन्टर पास
प्वाइन्टर पास मा, वास्तविक आर्गुमेन्टको ठेगाना औपचारिक आर्गुमेन्टमा पठाइन्छ। यस विधिले कार्यभित्र वास्तविक आर्गुमेन्टको मानलाई सिधै परिवर्तन गर्न सम्भव बनाउँछ।
void LevelUp(int *plv) {
(*plv)++;
}
int main() {
int level = 1;
LevelUp(&level);
printf("Level: %dn", level); // आउटपुट: Level: 2
}
यस उदाहरणमा、LevelUp
कार्यभित्र सिधै level
को मान परिवर्तन हुन्छ। प्वाइन्टर पासको लाभ भनेको कार्यबाट धेरै मानहरू परिवर्तन‑फिर्ता गर्न सक्नु हो, तर अनुचित प्वाइन्टर अपरेसनले बग वा स्मृति लीकको कारण बन्न सक्छ, त्यसैले सावधानीपूर्वक ह्यान्डल गर्न आवश्यक छ।
4. आर्गुमेन्टको संख्या र रिटर्न मानको संयोजन
आर्गुमेन्ट सहित, रिटर्न मान छैन
यो आर्गुमेन्ट भएको, प्रक्रिया परिणाम नफिर्ता गर्ने फङ्सनको उदाहरण हो। उदाहरणका लागि, void PrintScore(int score)
जस्तै, स्कोर देखाउन आर्गुमेन्ट लिने, तर केही फिर्ता नगर्ने फङ्सन हो।
आर्गुमेन्ट बिना, रिटर्न मान छ
आर्गुमेन्ट नलिई, प्रक्रिया परिणाम फिर्ता गर्ने फङ्सनको उदाहरण हो। उदाहरणका लागि, int GetCurrentScore()
ले, वर्तमान स्कोर गणना गरी फिर्ता गर्ने फङ्सन हो।
आर्गुमेन्ट सहित, रिटर्न मान छ
आर्गुमेन्ट लिने, प्रक्रिया परिणाम पनि फिर्ता गर्ने फङ्सनको उदाहरण हो।int Add(int a, int b)
जस्तै, दुई संख्याहरू लिई, तिनीहरूको योग फिर्ता गर्छ। यस्ता फङ्सनहरू लचिलो हुन्छन्, विभिन्न परिस्थितिहरूमा प्रयोग गरिन्छ।
5. पुनरावर्ती कल र आर्गुमेन्टहरू
पुनरावर्ती कल भनेको
पुनरावर्ती कल भनेको, फङ्क्शनले आफैलाई कल गर्ने विधि हो। समस्यालाई सानो भागमा विभाजन गरेर समाधान गर्दा प्रभावकारी हुन्छ, तर सही रूपमा नियन्त्रण नगरेमा स्ट्याक ओभरफ्लो हुन सक्छ।
पुनरावर्ती कलको उदाहरण
तलको उदाहरण आर्गुमेन्ट प्रयोग गरेर संख्यालाई 2 ले विभाजन गर्ने पुनरावर्ती कल हो।
int funcA(int num) {
if(num % 2 != 0) {
return num;
}
return funcA(num / 2);
}
int main() {
int result = funcA(20);
printf("Result: %dn", result); // आउटपुट: Result: 5
}
यस उदाहरणमा, funcA
फङ्क्शनले आफैलाई कल गरी, आर्गुमेन्ट प्रयोग गरेर दोहोर्याइ प्रक्रिया गर्दछ। पुनरावर्ती कलले समान प्रक्रिया धेरै पटक दोहोर्याउन सरल तरिकाले लेख्न सकिन्छ, तर समाप्ति सर्तलाई ठीकसँग सेट नगरेमा अनन्त लूपमा फस्न सक्छ, त्यसैले सावधानी आवश्यक छ।
6. कार्यात्मक म्याक्रोहरू र तर्कहरू
कार्यात्मक म्याक्रो के हो
कार्यात्मक म्याक्रोहरू तर्कहरू सहितका म्याक्रोहरू हुन्, जसले कम्पाइल समयमा कोडलाई प्रतिस्थापन गर्छ। यसले चलाउने समयमा प्रदर्शन सुधार गर्न सक्छ।
कार्यात्मक म्याक्रोको उदाहरण
तलको कोड एरेको तत्व संख्या प्राप्त गर्नको लागि कार्यात्मक म्याक्रो हो।
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
int main() {
int arr[10];
printf("Array size: %dn", ARRAY_SIZE(arr)); // आउटपुट: Array size: 10
}
कार्यात्मक म्याक्रोहरू कम्पाइल अघि कोडलाई प्रतिस्थापन गर्ने भएकाले, चलाउने समयमा ओभरहेड हुँदैन। साथै, प्रकार जाँच नहुनुका कारण, कुनै पनि डेटा प्रकारसँग काम गर्न सक्छन्, तर सावधानीपूर्वक प्रयोग नगरेमा अनपेक्षित व्यवहार उत्पन्न हुन सक्छ।
7. C भाषा को मानक लाइब्रेरीमा कार्यहरू र तर्कहरू
मानक लाइब्रेरी कार्यहरूको उपयोग
C भाषामा, मानक लाइब्रेरीको रूपमा धेरै कार्यहरू उपलब्ध गराइएका छन्, र ती कार्यहरूले तर्कहरू प्रयोग गरेर विभिन्न प्रक्रिया सञ्चालन गर्छन्। उदाहरणका लागि, printf
कार्यले परिवर्तनशील लम्बाइका तर्कहरू ग्रहण गरी, निर्दिष्ट ढाँचाअनुसार डेटा प्रदर्शन गर्छ।
मानक लाइब्रेरी कार्यहरूको उदाहरण
निम्नलिखित printf
कार्यको प्रयोग गरिएको उदाहरण हो।
printf("Name: %s, Age: %dn", "Alice", 30); // आउटपुट: Name: Alice, Age: 30
यस उदाहरणमा, printf
कार्यले स्ट्रिङ र संख्याहरू प्रदर्शन गर्न तर्कहरू प्रयोग गर्दछ। मानक लाइब्रेरीका कार्यहरूलाई उपयोग गरेर, कोडको पठनीयता र कार्यक्षमता सुधार हुन्छ।
8. सारांश
परिवर्तनीय लम्बाइ आर्गुमेन्टको प्रयोग
C भाषा मा, फङ्सनलाई पास गर्ने आर्गुमेन्टको संख्या लचिलो रूपमा परिवर्तन गर्न सकिनेपरिवर्तनीय लम्बाइ आर्गुमेन्टछ। यो फङ्सन परिभाषामा एलिप्सिस(...
)प्रयोग गरेर निर्दिष्ट गरिन्छ। परिवर्तनीय लम्बाइ आर्गुमेन्ट प्रयोग गर्दा, आर्गुमेन्टको संख्या निश्चित नभए पनि फङ्सन निर्माण गर्न सकिन्छ।printf
फङ्सन यसको प्रतिनिधि उदाहरण हो, जसले फर्म्याट स्ट्रिङ अनुसार विभिन्न संख्याका आर्गुमेन्टहरू लिन्छ।
परिवर्तनीय लम्बाइ आर्गुमेन्टको उदाहरण
तलको कोडमा, परिवर्तनीय लम्बाइ आर्गुमेन्ट प्रयोग गरेर धेरै पूर्णांकहरू लिई, तिनीहरूको योग गणना गर्ने फङ्सनको उदाहरण देखाइएको छ।
#include <stdarg.h>
#include <stdio.h>
int sum(int count, ...) {
va_list args;
va_start(args, count);
int total = 0;
for (int i = 0; i < count; i++) {
total += va_arg(args, int);
}
va_end(args);
return total;
}
int main() {
printf("Sum: %dn", sum(4, 1, 2, 3, 4)); // आउटपुट: Sum: 10
}
यस उदाहरणमा, sum
फङ्सनले धेरै पूर्णांकहरू लिई, तिनीहरूको योग फिर्ता गर्छ। va_list
, va_start
, va_arg
, va_end
जस्ता म्याक्रोहरू प्रयोग गरेर, परिवर्तनीय लम्बाइ आर्गुमेन्टलाई ह्यान्डल गर्न सकिन्छ।
ध्यान दिनुपर्ने बुँदाहरू
परिवर्तनीय लम्बाइ आर्गुमेन्ट प्रयोग गर्दा, पास गरिने आर्गुमेन्टको प्रकार र संख्यामा ध्यान दिनु आवश्यक छ। फङ्सनको कल गर्ने पक्ष र परिभाषित गर्ने पक्षमा आर्गुमेन्टको संख्या वा प्रकार मिल्दैन भने, अनपेक्षित व्यवहार वा प्रोग्रामको क्र्यास हुन सक्छ।
व्यावहारिक प्रयोग केसहरू र आर्गुमेन्टको उपयोग
आर्गुमेन्टको प्रभावकारी प्रयोग
आर्गुमेन्टलाई प्रभावकारी रूपमा प्रयोग गर्दा, कोडको पढ्न सजिलोपन र पुन: प्रयोगयोग्यता सुधार हुन्छ। उदाहरणका लागि, धेरै फङ्सनहरूमा एउटै डेटा प्रोसेस गर्दा, त्यो डेटालाई ग्लोबल भेरिएबलको रूपमा राख्नु भन्दा, आर्गुमेन्ट प्रयोग गरेर फङ्सनमा पास गर्नु राम्रो हुन्छ। यसले फङ्सनको स्वतन्त्रता बढाउँछ र अन्य कोडमा पर्ने प्रभावलाई न्यूनतम बनाउँछ।
मेमोरी दक्षता र प्रदर्शन
ठूलो डेटा आर्गुमेन्टको रूपमा पास गर्दा, पोइन्टर पासिङ प्रयोग गरेर मेमोरी प्रयोग घटाउन सकिन्छ। उदाहरणका लागि, ठूलो एरे वा स्ट्रक्चरलाई फङ्सनमा पास गर्दा मान पासिङले सम्पूर्ण डेटा कपी हुन्छ, तर पोइन्टर पासिङले केवल ठेगाना पास हुन्छ, जसले मेमोरी प्रयोगलाई कम गर्छ।
कोडिङको सर्वोत्तम अभ्यास
फङ्सन बनाउँदा, आवश्यक आर्गुमेन्टको संख्या र प्रकारलाई सावधानीपूर्वक डिजाइन गर्नु महत्त्वपूर्ण छ। अनावश्यक आर्गुमेन्ट पास गर्दा, फङ्सनको प्रयोग जटिल हुन्छ र बगको कारण बन्छ। उल्टो रूपमा, फङ्सनलाई आवश्यक सबै डेटा आर्गुमेन्टको रूपमा स्पष्ट रूपमा पास गर्दा, कोडको स्पष्टता र मर्मतयोग्यता सुधार हुन्छ।
9. आर्गुमेन्टसँग सम्बन्धित उन्नत प्रविधिहरू
कलब्याक फङ्क्शन
कलब्याक फङ्क्शन भनेको फङ्क्शनलाई आर्गुमेन्टको रूपमा अन्य फङ्क्शनमा पास गरेर, सो फङ्क्शनभित्र कल गर्ने विधि हो। यसले लचिलो प्रोसेसको कार्यान्वयन सम्भव बनाउँछ, विशेष गरी इभेन्ट-ड्राइभन प्रोग्रामहरू र असिंक्रोनस प्रोसेसिङमा प्रायः प्रयोग हुन्छ।
#include <stdio.h>
void executeCallback(void (*callback)(int)) {
callback(10);
}
void printValue(int val) {
printf("Value: %dn", val);
}
int main() {
executeCallback(printValue); // आउटपुट: Value: 10
}
यस उदाहरणमा, printValue
फङ्क्शनलाई कलब्याकको रूपमा पास गरी, executeCallback
फङ्क्शनभित्र कार्यान्वयन गरिन्छ।
फङ्क्शन पोइन्टर
फङ्क्शन पोइन्टर प्रयोग गर्दा, फङ्क्शनलाई भेरिएबल जस्तै व्यवहार गर्न सकिन्छ। यसले फङ्क्शनलाई आर्गुमेन्टको रूपमा पास गर्न वा रनटाइममा विभिन्न फङ्क्शनलाई कल गर्न सम्भव बनाउँछ। यो लचिलो र डायनामिक कोड लेख्दा अत्यन्त उपयोगी हुन्छ।
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*operation)(int, int) = add;
printf("Result: %dn", operation(2, 3)); // आउटपुट: Result: 5
}
यस उदाहरणमा, add
फङ्क्शनलाई फङ्क्शन पोइन्टर operation
मा असाइन गरी, भेरिएबल जस्तै फङ्क्शनलाई कल गरिन्छ।
10. कार्यको तर्कहरू र स्मृति व्यवस्थापन
डायनामिक स्मृति र तर्कहरू
C भाषामा, malloc
र free
कार्यहरू प्रयोग गरेर डायनामिक रूपमा स्मृति आवंटन गर्न सम्भव छ। कार्यमा तर्कको रूपमा डायनामिक रूपमा आवंटित स्मृति पोइन्टर पास गर्दा, स्मृति व्यवस्थापनमा ध्यान दिनु आवश्यक छ।
#include <stdlib.h>
#include <stdio.h>
void allocateMemory(int **ptr, int size) {
*ptr = (int *)malloc(size * sizeof(int));
}
int main() {
int *arr;
allocateMemory(&arr, 5);
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]); // आउटपुट: 1 2 3 4 5
}
free(arr); // मेमोरी फ्री गर्नुहोस्
}
यस उदाहरणमा, allocateMemory
कार्यले डायनामिक रूपमा स्मृति आवंटन गर्छ, र त्यस पोइन्टरलाई तर्कको रूपमा पास गरिन्छ। यदि स्मृति व्यवस्थापन ठीकसँग गरिएन भने, स्मृति रिसाव (memory leak) हुनसक्ने सम्भावना छ, त्यसैले ध्यान दिनु आवश्यक छ।