Asserção e mensagens fornecidas pelo usuário (C++)
A linguagem C++ dá suporte a três mecanismos de tratamento de erro que o ajudam a depurar seu aplicativo: a política #error, a palavra-chave static_assert e a macro assert (CRT). Todos os três mecanismos emitem mensagens de erro e dois também testam asserções de software. Uma asserção de software especifica uma condição que você espera ser verdadeira (true) em um ponto específico de seu programa. Se uma asserção de tempo de compilação falhar, o compilador emite uma mensagem de diagnóstico e um erro de compilação. Se uma asserção de tempo de execução falhar, o sistema operacional emite uma mensagem de diagnóstico e fecha seu aplicativo.
Comentários
O tempo de vida do seu aplicativo consiste de uma fase de pré-processamento, compilação e de tempo de execução. Cada mecanismo de tratamento de erro acessa as informações de depuração disponíveis durante uma dessas fases. Para depurar efetivamente, selecione o mecanismo que fornece as informações adequadas sobre essa fase:
A política #error entra em vigor no momento de pré-processamento. Ela incondicionalmente emite uma mensagem especificada pelo usuário e causa a falha da compilação com um erro. A mensagem pode conter texto que é manipulado pelas políticas do pré-processador, mas nenhuma expressão resultante é avaliada.
A declaração static_assert é aplicada no tempo de compilação. Ela testa uma asserção de software que é representada por uma expressão integral especificada pelo usuário que possa ser convertida em Booliano. Se a expressão for avaliada como zero (false), o compilador emitirá uma mensagem especificada pelo usuário e a compilação falhará com um erro.
A declaração static_assert é especialmente útil para depuração de modelos porque os argumentos de modelo podem ser incluídos na expressão especificada pelo usuário.
A macro assert (CRT) é aplicada no tempo de execução. Ela avalia uma expressão especificada pelo usuário e se o resultado for zero, o sistema emitirá uma mensagem de diagnóstico e fechará seu aplicativo. Muitas outras macros, como_ASSERT e _ASSERTE lembram a esta macro mas emitem mensagens de diagnóstico definidas pelo sistema ou pelo usuário diferentes.