Skip to content

Instantly share code, notes, and snippets.

View aedrax's full-sized avatar

Paul Sorensen aedrax

  • OP[4]
  • United States
View GitHub Profile
@aedrax
aedrax / defer.h
Last active September 8, 2022 23:06 — forked from baruch/defer.h
Defer cleanup for C (gcc and llvm)
#define DEFER_MERGE(a, b) a##b
#define DEFER_VARNAME(a) DEFER_MERGE(defer_scopevar_, a)
#define DEFER_FUNCNAME(a) DEFER_MERGE(defer_scopefunc_, a)
#define DEFER(BLOCK) \
void DEFER_FUNCNAME(__LINE__)(__attribute__((unused)) int *a) { BLOCK; } \
__attribute__((cleanup(DEFER_FUNCNAME(__LINE__)))) int DEFER_VARNAME(__LINE__)
// Usage:
/*
void dosomething()