Aserción y mensajes proporcionados por el usuario (C++)

El lenguaje C++ admite tres mecanismos de control de errores que ayudan a depurar la aplicación: la directiva #error, la palabra clave static_assert y la macro assert Macro, _assert, _wassert. Los tres mecanismos emiten mensajes de error y dos de ellos también prueban las aserciones de software. Una aserción de software especifica una condición que se espera que sea cierta (valor true) en un determinado punto del programa. Si se produce un error de aserción en tiempo de compilación, el compilador emite un mensaje de diagnóstico y un error de compilación. Si se produce un error de aserción en tiempo de ejecución, el sistema operativo emite un mensaje de diagnóstico y cierra la aplicación.

Comentarios

La duración de la aplicación se compone de una fase de preprocesamiento, una de compilación y una de tiempo de ejecución. Cada mecanismo de control de errores tiene acceso a la información de depuración disponible durante una de estas fases. Para depurar eficazmente, seleccione el mecanismo que proporciona la información adecuada sobre esa fase:

  • La directiva #error está vigente en el momento del preprocesamiento. Emite incondicionalmente un mensaje definido por el usuario y hace que se produzca un error de compilación. El mensaje puede contener texto que se manipula mediante directivas de preprocesador, pero no se evalúa ninguna expresión resultante.

  • La declaración static_assert está vigente en el momento de la compilación. Prueba una aserción de software que está representada por una expresión de tipo entero definida por el usuario que se puede convertir en un valor booleano. Si la expresión se evalúa como cero (false), el compilador emite el mensaje definido por el usuario y se produce un error de compilación.

    La declaración static_assert resulta especialmente útil para depurar plantillas, porque los argumentos de plantilla se pueden incluir en la expresión especificada por el usuario.

  • La macro assert Macro, _assert, _wassert está vigente en el momento de la ejecución. Evalúa una expresión definida por el usuario y, si el resultado es cero, el sistema emite un mensaje de diagnóstico y cierra la aplicación. Muchas otras macros, como _ASSERT y _ASSERTE, se parecen a esta macro pero emiten diferentes mensajes de diagnóstico definidos por el sistema o definidos por el usuario.

Consulte también

#error (directiva) (C/C++)
assert Macro, _assert, _wassert
_ASSERT, _ASSERTE, _ASSERT_EXPR (macros)
static_assert
_STATIC_ASSERT (Macro)
Plantillas