Análise da Questão sobre Programação Defensiva em C
A questão aborda um conceito fundamental da engenharia de software aplicada à linguagem C: a necessidade de tratar falhas potenciais durante a execução do programa.
Alternativa A
Programação Defensiva consiste em escrever código que seja capaz de lidar com situações imprevistas ou entradas inválidas sem falhar catastróficamente. No contexto da linguagem C, isso é crítico devido ao gerenciamento manual de recursos.
Por que a Alternativa A está correta?
Em C, o programador tem responsabilidade direta sobre a alocação de memória e abertura de arquivos. As funções malloc e fopen podem falhar por diversos motivos (memória insuficiente, arquivo não encontrado, permissão negada).
malloc: Se não consegue reservar a memória solicitada, ela retorna NULL. Tentar acessar essa memória gera um erro de segmentação (Segmentation Fault) e o programa trava.fopen: Se não consegue abrir o arquivo, também retorna NULL. Tentar ler ou escrever através desse ponteiro vazio causa comportamento indefinido.
Portanto, a prática obrigatória é validar o retorno dessas funções:
int *ptr = malloc(sizeof(int));
if (ptr == NULL) {
// Tratar erro: sair, imprimir mensagem, liberar outros recursos
}
Por que as outras alternativas estão incorretas?
| Alternativa | Motivo do Erro |
|---|
| B | Variáveis globais aumentam o acoplamento e dificultam a manutenção; não previnem falhas de alocação. |
| C | Recursividade não substitui loops para controle de fluxo; excesso de chamadas pode causar estouro de pilha (Stack Overflow). |
| D | Desabilitar warnings esconde erros potenciais de compilação; boas práticas exigem corrigir avisos. |
| E | Restringir tipos de dados (int vs float) limita a funcionalidade e não resolve problemas de alocação dinâmica. |
Conclusão
A alternativa A descreve exatamente o mecanismo de segurança necessário para garantir que o programa não tente acessar recursos que não foram criados com sucesso, protegendo contra crashes e vazamentos de recursos.