Políticas Curso de aprofundamento em linguagem C
Políticas de Programação Evitam erros comuns Ajudam no debug Menos tempo procurando um bug Redução de erros de runtime Podem tornar o código mais legível, eficiente e econômico
Passagem de Parâmetros Sempre const A não ser que sejam modificados Exceção para os tipos built-in (int, float, char...) Aplicar const preferencialmente a arrays e ponteiros Passagem de parâmetro do tipo struct deve ser feita preferencialmente através de ponteiros
Ponteiros Local de maior incidência de erros de runtime Alteração indevida, ou acesso a memória alheia leva a um comportamento não previsto. (ERRO!) Usar const na declaração sempre que possível const em arrays ou structs são aplicados a todos os membros
Ponteiros O const pode ser aplicado de várias formas a um ponteiro const char *str; char *const str; const char *const str; const char *const *const strList; Deve ser SEMPRE inicializado Se não houver valor inicial atribuir NULL
Variáveis Globais Comunicação de Threads Devem ser evitadas ao máximo Substituir globais por parâmetros da função que a referencia Quando for necessária a utilização proceder com as devidas declarações no módulo associado
Variáveis Globais Quando utilizada para comunicar processos lembrar de restringir o acesso concorrente Através de semáforos Se for usada dentro de laços declarar como volatile
Tempo de vida de Variáveis Classes de armazenamento Automático Tempo de vida resumido ao escopo da variável Estático Tempo de vida: duração do programa Armazenamento em Heap Tempo limite de vida determinado pelo programador
Tempo de vida de Variáveis Erros comuns Referenciar variáveis locais fora de seu escopo Atribuição de ponteiros que não tiveram sua memória liberada (resulta em memory leak) Como resolver? Variáveis que devem ser vistas fora de seu escopo devem ser alocadas na heap, e depois devidamente desalocadas Testar se os ponteiros apontam para um endereço válido (!NULL) e utilizar o free antes de qualquer atribuição
Tratamento de erros em C Compromisso com a eficiência Tratamento específico de erros é importante Como fazer o tratamento de erros? Através de códigos de erro Definidos como int ou byte (eficiência) Valores definidos como constantes
Tratamento de erros em C Transformação da função de acordo com o padrão de tratamento de erros Retorno vira parâmetro de saída Assumir que esses parâmetros estão devidamente alocados Parâmetros de saída são sempre ponteiros
Tratamento de erros em C Legibilidade no tratamento Padrões Se houver apenas um erro, a função retorna 0 (FALSE) quando ele ocorre e 1 (TRUE) quando não há erros Se existirem mais de um erro, 0 deve significar que tudo ocorreu normalmente, e os códigos de erro são distribuídos com os demais números (positivos) Definir Constantes de erro com nome legível e que referenciem a função.
Comando assert Serve para utilizar como sanity check Debug temporário Teste de situações que sempre deveriam ocorrer Caso não queira mais utilizá-los por questões de eficiência (release) pode ser desabilitado Definição Macro NDEBUG