with99/README.md
2025-04-10 00:58:05 +05:00

29 lines
751 B
Markdown

# Metalang99-based library, adding Python-like "with" blocks
```c
#include <stdlib.h>
#include <stdio.h>
#include <with99.h>
#define WITH99_resource_intptr_IMPL(var, init) \
ML99_tuple(\
ML99_just(v(int *var)),\
ML99_just(v((var = malloc(sizeof(int)),printf("Allocated %p(%s)\n", var, #var), *var = init, 0))),\
ML99_just(v((printf("Freed %p(%s)\n", var, #var), free(var))))\
)
#define With WITH99_With
#define Never while(0)
int main(void) {
With(
(intptr, a, 1),
(intptr, b, 3)
) do { // All resources are allocated here.
*a += *b;
printf("%d\n", *a);
} Never; // And deallocated here.
}
```