Looking for c Answers? Try Ask4KnowledgeBase
Looking for c Keywords? Try Ask4Keywords

C LanguageAfirmación


Introducción

Una aserción es un predicado de que la condición presentada debe ser verdadera en el momento en que el software encuentra la aserción. Las más comunes son las aserciones simples , que se validan en el momento de la ejecución. Sin embargo, las afirmaciones estáticas se verifican en el momento de la compilación.

Sintaxis

  • afirmar (expresión)
  • static_assert (expresión, mensaje)
  • _Static_assert (expresión, mensaje)

Parámetros

Parámetro Detalles
expresión Expresión de tipo escalar.
mensaje cadena literal que se incluirá en el mensaje de diagnóstico.

Observaciones

Tanto assert como static_assert son macros definidas en assert.h .

La definición de assert depende de la macro NDEBUG que no se define por la biblioteca estándar. Si se define NDEBUG , assert es un no-op:

#ifdef NDEBUG
#  define assert(condition) ((void) 0)
#else
#  define assert(condition) /* implementation defined */
#endif

La opinión varía sobre si NDEBUG siempre debe usarse para compilaciones de producción.

  • El pro-campo argumenta que assert llamadas abort y los mensajes de aserción no son útiles para los usuarios finales, por lo que el resultado no es útil para el usuario. Si tiene condiciones fatales para verificar el código de producción, debe usar las condiciones ordinarias if/else y exit o quick_exit para finalizar el programa. En contraste con la abort , estos permiten que el programa realice una limpieza (a través de las funciones registradas con atexit o at_quick_exit ).
  • La con-campamento sostiene que assert llamadas nunca deben disparar en el código de producción, pero si lo hacen, la condición que se comprueba significa que hay algo radicalmente equivocado y el programa se comportará mal peor si la ejecución continúa. Por lo tanto, es mejor tener las afirmaciones activas en el código de producción porque si se disparan, el infierno ya se ha desatado.
  • Otra opción es usar un sistema casero de aserciones que siempre realice la verificación pero que maneje los errores de manera diferente entre el desarrollo (cuando sea apropiado abort ) y la producción (donde un "error interno inesperado (contacte al Soporte Técnico" puede ser más apropiado).

static_assert expande a _Static_assert que es una palabra clave. La condición se verifica en el momento de la compilación, por lo que la condition debe ser una expresión constante. No hay necesidad de que esto se maneje de manera diferente entre el desarrollo y la producción.

Afirmación Ejemplos relacionados