पर पैरामीटर के रूप में फ़ंक्शन मैंने अभी देखा है कि यह -pedantic -Wall
और clang
दोनों के साथ -pedantic -Wall
का उपयोग करके किसी भी त्रुटि या चेतावनियों के बिना संकलित करता है।फ़ंक्शन
#include <stdio.h>
int x = 0;
void func(int f(const char *)) {
f("func()!");
}
int main(void) {
func(puts);
}
ऐसा लगता है कि पैरामीटर f
इस मामले में int (*)(const char *)
कार्य करने के लिए सूचक माना जाता है।
लेकिन यह एक ऐसा व्यवहार है जिसे मैंने कभी नहीं देखा या सुना है। क्या यह कानूनी सी कोड है? और यदि ऐसा है तो क्या होता है जब आपके पास फ़ंक्शन के पैरामीटर के रूप में फ़ंक्शन होता है?
फ़ंक्शन पॉइंटर्स मान्य पैरामीटर हैं, उदाहरण के लिए आप उनके साथ अलग-अलग कॉलबैक फ़ंक्शन पास कर सकते हैं। वह कार्य जो उन्हें प्राप्त करता है, फिर उस फ़ंक्शन को कॉल कर सकता है, कोई समस्या नहीं है। –
इस मामले में पैरामीटर का प्रकार "फ़ंक्शन" के रूप में लिखा गया है और "फ़ंक्शन के लिए पॉइंटर" के रूप में नहीं लिखा गया है, इस मामले में इसे 'int (* f) (const char *)' घोषित किया गया होगा। – wefwefa3
यह वाक्य रचनात्मक चीनी है और इसे पढ़ने के लिए घोषणाओं को आसान बनाने की अनुमति है। डुप्लिकेट प्रश्न के स्वीकृत उत्तर पर पहली टिप्पणी देखें। –