Aserciones en C/C++

Las aserciones son declaraciones que se utilizan para probar las suposiciones hechas por los programadores. Por ejemplo, podemos usar la aserción para verificar si el puntero devuelto por malloc() es NULL o no. 
A continuación se muestra la sintaxis para la aserción.
 

void assert( int expression ); 

Si la expresión se evalúa como 0 (falso), entonces la expresión, el nombre del archivo del código fuente y el número de línea se envían al error estándar y luego se llama a la función abort(). 
Por ejemplo, considere el siguiente programa. 
 

C

#include <stdio.h>
#include <assert.h>
 
int main()
{
    int x = 7;
 
    /*  Some big code in between and let's say x
       is accidentally changed to 9  */
    x = 9;
 
    // Programmer assumes x to be 7 in rest of the code
    assert(x==7);
 
    /* Rest of the code */
 
    return 0;
}

Producción 

Assertion failed: x==7, file test.cpp, line 13 
This application has requested the Runtime to terminate it in an unusual 
way. Please contact the application's support team for more information.

Aserción versus manejo normal de errores 
Las aserciones se utilizan principalmente para verificar situaciones lógicamente imposibles. Por ejemplo, se pueden usar para verificar el estado de un código que se espera antes de que comience a ejecutarse, o el estado después de que termine de ejecutarse. A diferencia del manejo normal de errores, las aserciones generalmente están deshabilitadas en tiempo de ejecución. Por lo tanto, no es una buena idea escribir sentencias en assert() que puedan causar efectos secundarios. Por ejemplo, escribir algo como afirmar (x = 5) no es una buena idea ya que se cambia x y este cambio no sucederá cuando las afirmaciones estén deshabilitadas. Vea esto para más detalles.
Ignorar aserciones 
En C/C++, podemos eliminar completamente las aserciones en tiempo de compilación usando el preprocesador NDEBUG. 
 

C

// The below program runs fine because NDEBUG is defined
# define NDEBUG
# include <assert.h>
 
int main()
{
    int x = 7;
    assert (x==5);
    return 0;
}

El programa anterior compila y funciona bien. 
En Java, las aserciones no están habilitadas de forma predeterminada y debemos pasar una opción al motor de tiempo de ejecución para habilitarlas.
Referencia:  
http://en.wikipedia.org/wiki/Assertion_%28software_development%29
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *