यह प्रश्न बहुत विशिष्ट नहीं है; यह वास्तव में मेरे अपने संवर्धन के लिए है और मुझे उम्मीद है कि अन्य इसे भी उपयोगी पा सकते हैं।जीसीसी स्टेटमेंट एक्सप्रेशन का उपयोग कर बेनामी फ़ंक्शन
अस्वीकरण: मुझे पता है कि कई लोगों के पास जवाब देने का आवेग होगा "यदि आप एफपी करने की कोशिश कर रहे हैं तो बस एक कार्यात्मक भाषा का उपयोग करें"। मैं एक एम्बेडेड वातावरण में काम करता हूं जिसे कई अन्य सी पुस्तकालयों से जोड़ने की ज़रूरत होती है, और इसमें कई अधिक साझा साझा libs के लिए अधिक जगह नहीं है और कई भाषा रनटाइम का समर्थन नहीं करता है। इसके अलावा, गतिशील स्मृति आवंटन प्रश्न से बाहर है। मैं भी वास्तव में उत्सुक हूँ।
हम में से कई लैम्ब्डा भाव के लिए इस गंधा सी मैक्रो देखा है:
#define lambda(return_type, function_body) \
({ \
return_type __fn__ function_body \
__fn__; \
})
और एक उदाहरण के उपयोग है:
int (*max)(int, int) = ({ int __fn__ (int x, int y) { return x > y ? x : y; } __fn__; });
:
int (*max)(int, int) = lambda (int, (int x, int y) { return x > y ? x : y; });
max(4, 5); // Example
gcc -std=c89 -E test.c
का उपयोग करना, लैम्ब्डा के लिए विस्तारित
तो, ये मेरे प्रश्न हैं:
लाइन int (* एक्स) क्या रेखा ठीक से करता है; घोषित करें? बेशक, int * एक्स; एक पूर्णांक के लिए एक सूचक है, लेकिन इन दोनों अलग कैसे हैं?
एक्सपेन्डेड मैक्रो पर एक नज़र डालने पर, पृथ्वी पर क्या अंतिम
__fn__
करता है? अगर मैं एक परीक्षण समारोहvoid test() { printf("hello"); } test;
लिखता हूं - जो तुरंत एक त्रुटि फेंकता है। मैं उस वाक्यविन्यास को समझ नहीं पा रहा हूं।डीबगिंग के लिए इसका क्या अर्थ है? (मैं खुद और जीडीबी के साथ प्रयोग करने की योजना बना रहा हूं, लेकिन दूसरों के अनुभव या राय बहुत अच्छी होंगी)। क्या यह स्थिर विश्लेषकों को खराब कर देगा?
यह एएनएसआई सी –
इसके अलावा, मैं' पूर्णांक (* एक्स) नहीं दिख रहा है नहीं है। –
यह इस तरह में नहीं है। वाक्यविन्यास को समझने की कोशिश करते समय, मैं थोड़ा सा स्टंप था कि int (* एक्स); संकलित करता है, लेकिन वास्तव में यह सुनिश्चित नहीं करता कि यह क्या परिभाषित किया गया है .. –