#include "stdio.h" #include "stdlib.h" #include "stdint.h" #include "string.h" #include "main.h" #include "lambda.h" #include "debug.h" typedef struct test_struct{ int a; int b; int (*sub)(int a, int b); int (*add)(int a, int b); int (*sum)(struct test_struct* self); } test_struct; lambda_use void run_callback(int (*fun)(int a, int b)) { int a = fun(1, 2); DBG_LOG("a = %d\n", a); } static test_struct test_struct_var = { .a = 1, .b = 2, .sub = lambda(int(int a, int b) { return a - b; }), .add = lambda(int(int a, int b) { return a + b; }), .sum = lambda(int(struct test_struct* self) { return self->a + self->b; }) }; int thread_fun(void* t) { void (*fun1)(int a, int b); fun1 = lambda(void(int a, int b) { DBG_LOG("a = %d, b = %d\n", a, b); }); fun1(1, 2); void (*fun2)(int a, int b); fun2 = lambda(void(int a, int b) { DBG_LOG("a = %d, b = %d a*b=%d\n", a, b, a * b); }); fun2(3, 4); void (*fun3)(void); fun3 = lambda(void(void) { int a = 3; int b = 4; DBG_LOG("a = %d, b = %d a*b=%d\n", a, b, a * b); }); fun3(); void (*fun4)(); fun4 = lambda(void() { int a = 5, b = 6; DBG_LOG("a = %d, b = %d a*b=%d\n", a, b, a * b); }); fun4(); unsigned int (*fun5)(int a, int b); fun5 = lambda(unsigned int (int a,int b) { DBG_LOG("a = %d, b = %d a*b=%d\n", a, b, a * b); return 6; }); fun5(3, 4); run_callback(lambda(int(int a, int b) { return a * b; })); run_callback(lambda(int(int a, int b) { return a * b * 10; })); DBG_LOG("test_struct_var.sub(1,2) = %d\n", test_struct_var.sub(1, 2)); DBG_LOG("test_struct_var.add(1,2) = %d\n", test_struct_var.add(1, 2)); DBG_LOG("test_struct_var.sum(&test_struct_var) = %d\n", test_struct_var.sum(&test_struct_var)); return 0; }