⚡️ C тоже умеет автоматическую очистку ресурсов. Просто почти никто об этом не знает — 18 мая 2026 г. в 10:53:58.006
⚡️ C тоже умеет автоматическую очистку ресурсов. Просто почти никто об этом не знает В C нет RAII как в C++ и нет defer как в Go. Поэтому код с ресурсами часто превращается в набор goto cleanup, ручных free() и риска забыть освободить память на одной из веток. Но у GCC и Clang есть полезное расширение - __attribute__((cleanup)). Оно позволяет повесить cleanup-функцию на локальную переменную. Когда переменная выходит из scope, компилятор сам вызывает эту функцию. Пример: void autofree(void *p) { free(*(void **)p); } #define auto __attribute__((cleanup(autofree))) int main() { auto char *buf = malloc(1024); // buf будет автоматически освобождён // при выходе из scope return 0; } Это просто автоматический вызов cleanup-функции в конце области видимости. Почему это удобно: • меньше ручных free() • меньше утечек на early return • чище код с несколькими ресурсами • проще писать функции без огромного cleanup: блока Но есть важный нюанс: это не стандартный C, а расширение компилятора. В portable-коде так лучше не делать, а вот в системном коде под GCC/Clang - вполне рабочий инструмент. C не стал безопасным языком от одной такой фичи. Но иногда он умеет больше, чем от него ожидают.

