| 1 |
#include <stdio.h> |
| 2 |
#include <Block.h> |
| 3 |
typedef int (^IntBlock)(); |
| 4 |
|
| 5 |
IntBlock MakeCounter(int start, int increment) { |
| 6 |
__block int i = start; |
| 7 |
|
| 8 |
return Block_copy( ^ { |
| 9 |
int ret = i; |
| 10 |
i += increment; |
| 11 |
return ret; |
| 12 |
}); |
| 13 |
|
| 14 |
} |
| 15 |
|
| 16 |
int main(void) { |
| 17 |
IntBlock mycounter = MakeCounter(5, 2); |
| 18 |
printf("First call: %d\n", mycounter()); |
| 19 |
printf("Second call: %d\n", mycounter()); |
| 20 |
printf("Third call: %d\n", mycounter()); |
| 21 |
|
| 22 |
/* because it was copied, it must also be released */ |
| 23 |
Block_release(mycounter); |
| 24 |
|
| 25 |
return 0; |
| 26 |
} |
| 27 |
/* Output: |
| 28 |
First call: 5 |
| 29 |
Second call: 7 |
| 30 |
Third call: 9 |
| 31 |
*/ |
| 32 |
|
| 33 |
// From https://en.wikipedia.org/wiki/Objective-C |
| 34 |
|