Pergunta

Estou criando um sistema. O que eu quero saber é se uma msg não é suportado o que deve fazer? deveria eu jogo dizendo msg não suportado? Devo retornar 0 ou -1? ou devo definir um errno (base-> errno_). Algumas mensagens não tomaria eu importo se houve um erro (como setBorderColour). Outros Eu (addText ou talvez salvar se eu criar um save cmd).

Eu quero saber qual o melhor método é para 1) codificação rapidamente 2) depuração 3) ampliação e manutenção. I pode fazer a depuração 3º, é difícil de debug ATM, mas isso é bc há uma grande quantidade de código que eu não preencher faltando. Erros reais Arent difícil de corrigir. Qual é a melhor maneira de deixar o know usuário há um erro?

O sistema funciona assim, mas não exatamente o mesmo. Esse é o estilo C e mycode tem um monte de funções inline que envolvem setText (char const * texto) {a msg (este, esettext, texto)

Base base2, base;
base = get_root();
base2 = msg(base, create, BASE_TYPE);
msg(base2, setText, "my text");
const char *p = (const char *)msg(base2, getText);
Foi útil?

Solução

Geralmente se de C ++, preferem exceções a menos que o desempenho é crítico ou a menos que você pode estar executando em um ambiente (por exemplo, uma plataforma embarcada) que não suporta exceções. As exceções são, de longe, a melhor escolha para a depuração, porque eles são muito visíveis quando eles ocorrem e são ignorados. Além disso, as exceções são auto-documentadas. Eles têm o seu próprio nome de tipo e, geralmente, uma mensagem contida que explica o erro. Códigos de Retorno e errno exigem definições de código separados e algum tipo de modo out-of-band de comunicar o que os códigos significa em qualquer contexto (por exemplo homem páginas, comentários).

Para a codificação rapidamente, códigos de retorno são, provavelmente, mais fácil, uma vez que não envolvem potencialmente definir seus próprios tipos de exceção, e muitas vezes a verificação de erros de código não é tão detalhado como com exceções. Mas é claro que o grande risco é que é muito mais fácil de ignorar silenciosamente códigos de retorno de erro, levando a problemas que não podem ser notados até bem depois que eles ocorrem, tornando a depuração e manutenção de um pesadelo.

Tente evitar sempre usando errno, já que é muito própria propenso a erros. É uma global, de modo que você nunca sabe quem está redefini-lo, e é mais definitivamente não thread-safe.

Editar: Eu só percebi que você significou uma variável membro errno e não o errno C-estilo. Isso é melhor na medida em que não é global, mas você ainda precisa construções adicionais para torná-lo o segmento de seguros (se o seu aplicativo é multi-threaded), e mantém todos os problemas de um código de retorno.

Outras dicas

Voltando um código de erro requer disciplina porque o código de erro deve ser explicitamente marcada e, em seguida, passou-se. Nós escrevemos um grande sistema baseado em C que utilizou esta abordagem e levou um tempo para remover todos os erros "perdidos". Nós finalmente desenvolveu algumas técnicas para travar este problema (como armazenar o código de erro em um local thread-global e verificação no nível superior para ver que o código de erro retornado combinava com o código de erro salvo).

A manipulação de exceção é mais fácil de código rapidamente, porque se você estiver escrevendo código e você não tem certeza de como lidar com o erro, você pode simplesmente deixá-lo propagar para cima (supondo que você não está usando Java onde você tem que lidar com exceções verificadas). É melhor para depurar porque você pode obter um rastreamento de pilha de onde ocorreu a exceção (e porque você pode construir em manipuladores de exceção de nível superior para problemas de captura que deveriam ter sido capturados em outros lugares). É melhor para a manutenção, porque se você fez as coisas direito, você será notificado de problemas mais rápida.

No entanto, existem alguns problemas de design com a manipulação de exceção, e se você errar, você vai ser pior. Em suma, se você está escrevendo código que você não sabe como lidar com uma exceção, você deve deixá-lo propagar-se. Muitos erros codificadores armadilha apenas para converter a exceção e, em seguida, relançar-lo, resultando em código de exceção spaghetti que às vezes perde informações sobre a causa original do problema. Isso pressupõe que você tem manipuladores de exceção no nível superior (pontos de entrada).

Pessoalmente quando se trata de dar saída a gráficos, sinto uma falha silenciosa está bem. Ela só faz o errado imagem.

erros gráficos são super fáceis de detectar qualquer maneira.

Pessoalmente, gostaria de acrescentar um errno à sua estrutura base, se ele é puro 'C'. Se este for C ++ eu lançar uma exceção.

Depende de como 'fatal' esses erros são. Será que o usuário realmente precisa ver o erro, ou é para outros desenvolvedores edificação?

Para manutenção que você precisa para documentar claramente os erros que podem ocorrer e incluem exemplos claros de manipulação de erro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top