To some extents, it depends on the definition of C: by the standard, you're right, you can't. But with some relatively common (GCC and clang) extension (ie. __attribute__((cleanup))) you definitely can, see g_autoptr() from GLib for an easy way to use it: https://blogs.gnome.org/desrt/2015/01/30/g_autoptr/