Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct {
- int *a;
- int *b;
- } my_struct;
- my_struct *my_struct_init() {
- WITH_RESOURCES(
- my_struct *m;
- // WITH_SIZED_MALLOC(m ) это примерно m = malloc(sizeof(*m))
- WITH_SIZED_MALLOC(m );
- WITH_SIZED_MALLOC(m->a);
- WITH_MALLOC(m->b, 32 * sizeof(int));
- return m;
- );
- return NULL;
- }
- int main(void) {
- WITH_RESOURCES(
- FILE *in;
- WITH_FILE(in, "1.txt", "r");
- FILE *out;
- WITH_FILE(out, "2.txt", "w");
- char c[128];
- printf("reading... ");
- size_t s = fread(c, 1, 128, in);
- printf("%zu\n", s);
- size_t s2 = fwrite(c, 1, s, out);
- ENSURE(s == s2);
- printf("Successfully written all %zu bytes\n", s);
- );
- return 0;
- }
- // Еще внутри WITH_RESOURCES работает break;
- // Он выходит из блока без очистки ресурсов.
- // Еще есть ADD_CLEANUP. my_struct_init можно было бы написать так:
- my_struct *my_struct_init() {
- WITH_RESOURCES(
- ADD_CLEANUP(
- printf("allocation error!\n");
- return NULL;
- );
- my_struct *m;
- WITH_SIZED_MALLOC(m );
- WITH_SIZED_MALLOC(m->a);
- WITH_MALLOC(m->b, 32 * sizeof(int));
- return m;
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement