Defer в Си
Мне очень нравится конструкция defer в «Гоу» — очень удобно для управления ресурсами, можно рядом с получением
Оказывается в прошлом году её предложили добавить и в Си (чему я очень рад, потому что в последнее время больше всего, пожалуй, пишу именно на нём),
Комментарии 9
https://github.com/EpicGamesExt/raddebugge … ore.h#L190
Я вообще думал, что нечто похожее можно через __cleanup__ и фейковую переменную сделать, будет работать лучше этого хака с циклом.
типа им эти ограничения меньшее зло, чем то что тянут с собой остальные решения (другой язык и пр.)
Так уже реализовали, я об этом и пишу. Можно скачать clang 22 и посмотреть.
В реальности всё проще — компилятор статически ищет все точки выхода из блока, такие как return и break и вставляет код defer перед ними.
Забавно, что clang даже с -O0 может объединять несколько if() return; в один сложный if и единственный return.