c - lambda - 在C中,理解宏

  显示原文与译文双语对照的内容

我在github上发现了这段代码,但是不完全理解它:


#define lambda(ret_type, _body) ({ ret_type _ _body _; })



然后:


int (*max)(int, int) = lambda(int,


 (int x, int y) {


 return x > y ? x : y;


 });



int max_value = max(1, 2);


// max_value is 2



#define内部的下划线是什么,它如何返回函数指针?

时间:

使用这个宏,


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; }


 _;


});



在大括号中,这使用GCC的嵌套Functions创建执行所需操作的函数,在内部作用域中,它的名称为_

然后,如interjay所说,使用GCC的复合Statements在Expressions,有效,函数_被分配给指针max

如果未使用这样的a宏,则可以以不同的方式写入此宏,并用作:


int apply_binary_op(int (*op)(int, int), int num1, int num2) {


 return op(num1, num2);


}



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 apply_binary_op(max, 4, -30);


}



可以比较三种方法这个代码示例

...