C++ supports this sort of thing directly.  It says something about C++ takeup that anyone would bother adding this kludge to C. Many people are scared of C++.  The language has become incredibly complex.<p>C++ templates are Turing-complete.  You can do arbitrary computation at compile time.  Once this was discovered, ever-fancier templates became a basic part of C++.  (Take a look at the huge templates that implement &quot;max&quot; and &quot;min&quot;.) Then the C++ standards committee went off into template la-la land, focusing on adding features to make the template system more powerful.  After a decade of this, many standard templates are now at the &quot;you are not supposed to understand this&quot; level.<p>This has scared people off of C++, which is why there&#x27;s still much work in standard C.  So now we&#x27;re seeing features added to C to solve specific problems, but without an architecture.<p>&quot;Defer&quot; is troublesome, because dealing with errors in deferred statements is hard. C++ has the same problem with destructors.  A &quot;with&quot; clause, which LISP introduce as &quot;with-open-file&quot; and Python also supports, is a better way to do this. Python&#x27;s combination of &quot;with&quot; and exception handling can handle an error when closing out a resource, and get all the nested resources closed out properly.  Few other languages even try to get that right.