28 lines
582 B
Markdown
28 lines
582 B
Markdown
# Metalang99-based library, adding Python-like "with" blocks
|
|
|
|
```c
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
#include <with99.h>
|
|
|
|
#define WITH99_RESOURCE_TYPE_intptr(...) int*
|
|
#define WITH99_RESOURCE_INIT_intptr(res, ...) (printf("Allocated to %p\n", res), *res = malloc(sizeof(int)), 0)
|
|
#define WITH99_RESOURCE_FREE_intptr(res, ...) (printf("Freed %p at %p\n", res, *res), free(*res))
|
|
#define WITH99_RESOURCE_THROWS_intptr(res, ...) 0
|
|
|
|
#define With WITH99_With
|
|
|
|
int main(void) {
|
|
With(
|
|
(intptr, a),
|
|
(intptr, b)
|
|
) {
|
|
*a = 1;
|
|
*b = 2;
|
|
*a += *b;
|
|
printf("%d\n", *a);
|
|
}
|
|
}
|
|
```
|