如何建立网站建设百度最怕哪个部门去投诉
转载需经作者同意,并注明出处
前言
我的一块板子,好像不支持多线程。于是我想到了python中的生成器。
就是这个MCU:ATMEGA168P
文章看着玩玩而已,仅供学习和娱乐。
正文
首先定义一个测试的函数。(姑且叫它生成器好了)
功能是从1数到a。(类似python的range)
int func(void** func_save, char *func_flag, int a){return 0;}
参数中的func_save是这个生成器的参数与局部变量的保存区域,func_flag是它的运行状态。
这里简单地将0作为起始状态,1作为运行状态,2作为结束状态。
这个结构体就是用来保存生成器的东东。
// The data of the running function.typedef struct {int arg_0; int counter;} func_object;
一开始,初始化的时候在内存中开辟一块区域,存放生成器的参数与局部变量。
if (!*func_save && !(*func_flag)) {*func_save = calloc(1, sizeof(func_object));((func_object*)*func_save) -> arg_0 = a;*func_flag = 1;}
当然有开始就要有结束,做事不能够虎头蛇尾。
// Exit status.if(((func_object*)*func_save) -> counter >= ((func_object*)*func_save) -> arg_0){free(*func_save);*func_save = NULL;*func_flag = 2;}
然后在这两片代码中间插入主要的代码。
如果使用类似状态机或断点的设计,则需要在结构体中存放相应的状态
(使用时通常用switch...case...)
// Execute the main function.((func_object*)*func_save) -> counter ++;
然后在函数的末尾将生成结果返回。(把最开始的)return 0去掉
// Yield value.return ((func_object*)*func_save) -> counter;
这样一个简易的生成器就造好了
有什么问题呢?
我们先写一段代码测试一下
int main(void){void *f1 = 0