এই ম্যাক্রো ব্যবহার করে,
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
) এটি কী করে তা দেখার জন্য?