block学习总结

来源:互联网 发布:三菱plc编程实例详解 编辑:程序博客网 时间:2024/06/06 10:57

Blocks是带有自动变量(局部变量)的匿名函数

  • 没有函数名
  • 带有^

语法规则如下:

^ 返回值类型 参数列表 表达式

^int (int count) {return count + 1;} //但是block语法可以省略好几个项目。首先是返回值类型。

省略返回值类型时,如果表达式中有return语句就使用该返回值的类型,如果表达式中没有return语句就使用void类型。表达式中含有多个return语句时,所有return的返回值类型必须相同。

如果不使用参数,参数列表也可以省略。

^{printf("Blocks\n");}

返回值类型以及参数列表均被省略的Block语法是大家最为熟知的记述方式吧。

可以使用typedef来声明Block类型  typedef int (^blk_t) (int); 可以通过使用typedef来声明blk_t类型的变量。

截获自动变量值

int main ()

{

 int dmy = 256;

 int val = 10;

const char *fmt = "val = %d\n";

void (^blk)(void) = ^{printf(fmt, val);};

val = 2;

fmt = "These values were changed. val = %d\n";

blk();

return 0;

}

blocks中,表达式截获所使用的自动变量的值,即保存该自动变量的瞬间值。因为block表达式保存了自动变量的值,所以在执行block语法后,即使改写block中使用的自动变量的值也不会影响block执行时自动变量的值。因此这里打印出来的结果是val = 10


0 0
原创粉丝点击