GNU C用宏实现lambda表达式

来源:互联网 发布:spss for mac 破解版 编辑:程序博客网 时间:2024/06/06 02:20

看到一篇文章,利用GNU C提供的嵌套函数(nested function)来实现lambda表达式的功能,很有意思。原文在这里。代码如下:

#include <stdlib.h>#include <stdio.h> #define lambda(l_ret_type, l_arguments, l_body)         \  ({                                                    \    l_ret_type l_anonymous_functions_name l_arguments   \      l_body                                            \    &l_anonymous_functions_name;                        \  }) int main (int argc, char *argv[]){  int array[] = { 4, 3, 1, 2, 5 };   void dump (void){    int i;    for (i = 0; i < sizeof (array) / sizeof (array[0]); i ++)      printf ("%d ", array[i]);    printf ("\n");  }   printf ("Initial: ");  dump ();   int comparison = 0;   qsort (array, sizeof (array) / sizeof (array[0]), sizeof (array[0]),         lambda (int, (const void *a, const void *b), {                   dump ();                   printf ("Comparison %d: %d and %d\n",                           ++ comparison, *(const int *) a, *(const int *) b);                   return *(const int *) a - *(const int *) b;                 }));   printf ("Sorted: ");  dump ();   return 0;}