[c] आप सी में पैरामीटर के रूप में फ़ंक्शन कैसे पास करते हैं?


Answers

इस प्रश्न में पहले से ही फंक्शन पॉइंटर्स को परिभाषित करने का उत्तर है, हालांकि वे बहुत गन्दा हो सकते हैं, खासकर यदि आप उन्हें अपने आवेदन के आसपास पास करने जा रहे हैं। इस अप्रियता से बचने के लिए मैं अनुशंसा करता हूं कि आप फ़ंक्शन पॉइंटर को कुछ और पठनीय में टाइप करें। उदाहरण के लिए।

typedef void (*functiontype)();

एक समारोह घोषित करता है जो शून्य लौटाता है और कोई तर्क नहीं लेता है। इस प्रकार के लिए फ़ंक्शन पॉइंटर बनाने के लिए अब आप कर सकते हैं:

void dosomething() { }

functiontype func = &dosomething;
func();

एक ऐसे फ़ंक्शन के लिए जो एक int देता है और एक char लेता है जो आप करेंगे

typedef int (*functiontype2)(char);

और इसका इस्तेमाल करने के लिए

int dosomethingwithchar(char a) { return 1; }

functiontype2 func2 = &dosomethingwithchar
int result = func2('a');

पुस्तकालय हैं जो फ़ंक्शन पॉइंटर्स को अच्छे पठनीय प्रकारों में बदलने में मदद कर सकते हैं। बूस्ट फ़ंक्शन लाइब्रेरी बहुत अच्छी है और प्रयास के लायक है!

boost::function<int (char a)> functiontype2;

उपर्युक्त की तुलना में बहुत अच्छा है।

Question

मैं एक ऐसा फ़ंक्शन बनाना चाहता हूं जो डेटा के सेट पर पैरामीटर द्वारा पारित फ़ंक्शन निष्पादित करता हो। आप सी में पैरामीटर के रूप में फ़ंक्शन कैसे पास करते हैं?




जैसा कि नीचे दिखाया गया है, किसी अन्य फ़ंक्शन पर पैरामीटर के रूप में फ़ंक्शन का पता पास करें

#include <stdio.h>

void print();
void execute(void());

int main()
{
    execute(print); // sends address of print
    return 0;
}

void print()
{
    printf("Hello!");
}

void execute(void f()) // receive address of print
{
    f();
}

इसके अलावा हम फ़ंक्शन पॉइंटर का उपयोग करके पैरामीटर के रूप में फ़ंक्शन को पास कर सकते हैं

#include <stdio.h>

void print();
void execute(void (*f)());

int main()
{
    execute(&print); // sends address of print
    return 0;
}

void print()
{
    printf("Hello!");
}

void execute(void (*f)()) // receive address of print
{
    f();
}



Links