Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DAVIFN

Dica para nosso programa ficar melhor!

Recommended Posts

Bom dia, agora irei ensinar uma dica para nosso programa, caso falhe, não dizer nenhuma mensagem de Erro de comando, a memória não pode ser Read, etc.

 

 

A dica é muito simples, basta utilizar ifs.

 

Como assim? ifs? isto mesmo. if()

 

Exemplo:

 

fprintf(Arquivo,"Teste");

 

Aqui, nesta simples linha de comando, nosso programa irá inserir "Teste" em outro arquivo. Porém, caso o arquivo falhe na abertura, e tentarmos inserir, nosso programa será encerrado com uma mensagem de erro.

 

 

Trocando esta linha por:

 

if(fprintf(Arquivo,"Teste")){}

 

Em caso de erro não acontecerá nada, e nosso programa continuará rodando.

 

 

Caso você queira que o programa encerre sem mostrar mensagem, basta usar:

 

if(fprintf(Arquivo,"Teste"))return 0;

 

Ou até mesmo:

 

if(fprintf(Arquivo,"Teste"))ExitProcess(1);

 

Espero ter ajudado alguém.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a vantagem de não mostrar erro?

 

Você só está deixando que um bug que seria parado continue no programa. O certo seria chamar uma função caso desse erro que cuidaria do problema, e não simplesmente ignorar. Você só está tornando seu programa inseguro.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Qual a vantagem de não mostrar erro?

 

Você só está deixando que um bug que seria parado continue no programa. O certo seria chamar uma função caso desse erro que cuidaria do problema, e não simplesmente ignorar. Você só está tornando seu programa inseguro.

 

Sim mas nada custa testar o programa e atualizá-lo, exemplos:

 

 

Caso um programa tente abrir um arquivo em modo de "w", ou seja, criar se não existir e se existir deletar o conteúdo, se o arquivo em questão estiver oculto o programa exibirá uma mensagem de erro. Geralmente as mensagens são em caixas de diálogo, com textos tipo : 0x11344656, A memória não pode ser "read", algo assim, então, é melhor utilizar o if()return 0; Para não exibir a mensagem, ou até mesmo usar if()MessageBox() Com um texto mais agradável ao usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

O correto é chamar algum error handler que você fez para sua aplicação caso houver algum erro. Fazer um if() return 0; igual você quer só vai dificultar descobrir o motivo do problema. Imagina em um programa de 100 mil linhas, e você coloca isso, como eu vou saber onde o programa está dando problema? Debugar? Não, obrigado, se isso pode ser descoberto sem precisar usar um debugger, é melhor.

 

O correto então seria isso:

 

if(<validação do código>) endWithError("<mensagem_do_erro>");

 

Aí você pode fazer algo do tipo:

 

// Note que não há ; no final para usarmos depois do macro no código.
#define ASSERT_ERROR(expression, error_message) if((expression)) endWithError(error_message, __FILE__, __LINE__) // Veja que passamos o arquivo e a linha do arquivo junto para definirmos onde o erro está.


// ...

// Use assim (lembrando que erros no fprintf são marcados com caracteres menores que zero, não diferentes de zero):
ASSERT_ERROR(fprintf(stdout, "something") < 0, "Problem with fprintf()");

 

Abraços :D/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso if() MessageBox(NULL,"Erro!","",MB_OK); para ver erros.

 

Mas o que eu quis dizer é depois do programa feito, já compilado, não exibir mais erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em caso de erro não acontecerá nada, e nosso programa continuará rodando.

 

Isso é a pior coisa pra se fazer. Deu erro, informe e saia. Se possível, restaure à condição anterior ao erro.

 

Não caia nessa de não exibir erros depois do programa pronto. Aí sim você perde usuários porque ninguém sabe o que aconteceu com os arquivos. A Mozilla, por exemplo, apresenta uma telinha p/ que você mande um relatório do que aconteceu com o Firefox. Isso só aumenta a qualidade do software.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso if() MessageBox(NULL,"Erro!","",MB_OK); para ver erros.

 

Complementando a _Isis_, isso seria completamente inútil, pois o usuário não saberia o que ocorreu - nem você. Você precisa gerar algum relatório de erro (nem que seja como falei, o arquivo e linha do erro - que é o mais básico a se fazer, pois também tem as diferenças de arquitetura, sistema operacional, DLL's sendo utilizadas, etc, mas o mais básico é arquivo e linha) para permitir que você descubra o bug que gerou o erro. E pode até automatizar como o Firefox para enviar o relatório de erro. Isso só aumenta a confiança dos seus usuários, eles sabem que você está trabalhando para corrigir o problema.

 

Não deixe o programa continuar rodando caso der algum erro, o que você deve fazer é fechar caso não conseguir restaurar a condição anterior ao erro, como a _Isis_ disse. Imagina, por exemplo, que desse falha em um download que você tivesse fazendo com o Firefox: 1 byte em 32mb foi perdido na rede. Imagina se o Firefox tivesse esse método seu de fechar caso desse erro, o usuário ficaria sem saber o que houve, e provavelmente puto com o programa - talvez até para parar de usar ele. Ainda pior, imagina se o Firefox simplesmente ignorasse o byte que foi perdido, o arquivo que foi baixado seria corrompido, e o usuário nem teria ideia do que houve.

 

Então, jogue seguro, sempre cheque os erros, e faça um error report caso der um =)

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

É... tem razão. Mas ali onde disse que uso MessageBox para visualizar os erros não quis dizer que eu deixo as MB no programa depois de feito, é mais para ver onde é o erro mesmo. Valeu pela explicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites
É... tem razão. Mas ali onde disse que uso MessageBox para visualizar os erros não quis dizer que eu deixo as MB no programa depois de feito, é mais para ver onde é o erro mesmo. Valeu pela explicação.

 

Nada =)

 

A questão é fazer o erro aparecer mesmo quando o programa estiver em fase de produção, pois assim você pode sempre melhorar a qualidade dele.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.