इस मैक्रो का उपयोग करते हुए,
int (*max)(int, int) = lambda(int,
(int x, int y) {
return x > y ? x : y;
});
इसका विस्तार:
int (*max)(int, int) = ({
int _ (int x, int y) { return x > y ? x : y; }
_;
});
घुंघराले ब्रेसिज़ में, यह एक फ़ंक्शन बनाने के लिए जीसीसी के नेस्टेड फ़ंक्शंस का उपयोग करता है जो वांछित ऑपरेशन करता है। भीतर के दायरे में, इसका नाम है _
।
फिर, जैसा कि अंतरजाल द्वारा उल्लेख किया गया है, जीसीसी के स्टेटमेंट एक्सप्रेशंस का उपयोग किया जाता है। प्रभावी रूप से, फ़ंक्शन _
पॉइंटर को सौंपा गया है max
।
यदि इस तरह के मैक्रो का उपयोग नहीं किया जा रहा है, तो इसे अलग तरह से लिखा और इस्तेमाल किया जा सकता है:
int val1 = 4;
int val2 = -30;
int perform_operation(int (*op)(int, int)) {
int new_val = op(val1, val2);
val1 = val2;
val2 = new_val;
return new_val;
}
int enclosing_function (void) {
// Create max "lambda"
int (*max)(int, int);
{
// Curly braces limit the scope of _
int _ (int x, int y) { return x > y ? x : y; }
max = _;
}
return perform_operation(max);
}
इस कोड उदाहरण में तीन तरीकों की तुलना की जा सकती है ।
gcc -E
) यह देखने के लिए कि यह क्या करता है?