Pular para o conteúdo principal
usedby

Padronizando a limpeza de recursos com o defer do C2Y

Não leve isso para código de produção de missão crítica até que o GCC 16 ou 17 tenha uma versão estável. Embora a implementação do Clang 22 seja robusta, a fragmentação atual obriga a depender de simulações baseadas em macros.

O pitch

O comitê ISO C finalizou a Technical Specification 25755, que leva oficialmente a palavra-chave defer para a trilha de padronização do C2Y (fonte: blog de Jens Gustedt, fevereiro de 2026). Esse mecanismo oferece uma forma nativa, baseada em escopo, de agendar código de limpeza, com o objetivo de substituir os padrões manuais e propensos a erros de goto cleanup que dominam o desenvolvimento em C há décadas.

Por dentro

A implementação do defer no C2Y é uma resposta à pressão crescente para que o C adote recursos modernos de segurança, sobretudo depois que o kernel Linux passou a ter suporte permanente a Rust no início de 2026 (fonte: DevNewsletter, janeiro de 2026).

Status da implementação técnica:
* O Clang 22 está na frente, com suporte nativo pela flag -fdefer-ts (fonte: blog de Jens Gustedt).
* O suporte nativo no GCC ainda está em branches de desenvolvimento, com versão estável prevista para o GCC 16 ou 17 (fonte: Hacker News).
* Um fallback baseado em macros para GCC 9+, usando __attribute__((cleanup)), está sendo usado em produção para simular o recurso (fonte: Anton Zhiyanov).
* Ao contrário do defer do Go, que atua no nível da função, a versão do C é baseada em escopo e executa ao fim do bloco atual (fonte: blog de Jens Gustedt).

Riscos e limitações identificados:
* Confusão de escopo: executar ao fim de um bloco, e não de uma função, pode causar erros de lógica se o defer for usado dentro de loops (fonte: r/C_Programming).
* Fragmentação entre compiladores: as equipes precisam manter wrappers de macros para garantir estabilidade multiplataforma até o GCC alcançar o Clang (fonte: Hacker News).
* Segurança da ABI: especialistas alertam que fallbacks de macros do GCC que usam 'nested functions' podem levar a exploits de pilha via trampolins (fonte: blog de Jens Gustedt).

Ainda não sabemos qual será a data oficial de lançamento do GCC 16/17.

Nossa opinião

Não leve isso para código de produção de missão crítica até que o GCC 16 ou 17 tenha uma versão estável. Embora a implementação do Clang 22 seja robusta, a fragmentação atual obriga a depender de simulações baseadas em macros, que introduzem riscos desnecessários de ABI. A execução baseada em escopo é tecnicamente superior ao modelo do Go para programação de sistemas, mas exige uma mudança de mentalidade para evitar vazamentos de recursos em loops complexos. É uma evolução vital para a sobrevivência do C em 2026, mas mantenha-a nos seus projetos paralelos por pelo menos mais dois trimestres.