◐ Shell
clean mode source ↗

assert - cppreference.com

De cppreference.com

Definido en el archivo de encabezado <assert.h>

#ifdef NDEBUG #define assert(condition) ((void)0) #else #define assert(condition) /*definido en implementacion*/ #endif

La definición de la macro assert depende de otra macro, NDEBUG, que no está definida por la biblioteca estándar.

Si NDEBUG está definido como un nombre de macro en el punto del código fuente donde <assert.h> está incluido, entonces assert no hace nada.

Si NDEBUG no está definido, assert comprueba si su argumento (que debe tener tipo escalar) es igual a cero. Si lo hace, assert produce información de diagnóstico específica de la implementación sobre la salida de error estándar y llama a abort()}. La información de diagnóstico debe incluir el texto de expresión, así como los valores de las macros estándar. __FILE__, __LINE__, y la variable predefinida __func__. (desde C99)

Parametros

condition - expresión de tipo escalar

Valor de retorno

(ninguno)

Ejemplo

#include <stdio.h>
// descomente para desactivar assert()
// #define NDEBUG
#include <assert.h>
#include <math.h>

int main(void)
{
    double x = -1.0;
    assert(x >= 0.0);
    printf("sqrt(x) = %f\n", sqrt(x));   

    return 0;
}

Salida:

con NDEBUG no definido:
a.out: main.cpp:10: main: Assertion `x >= 0.0' failed.

con NDEBUG definido:
sqrt(x) = -nan

Referencias

  • Standard C11 (ISO/IEC 9899:2011):
  • 7.2.1.1 The assert macro (p: 186-187)
  • Standard C99 (ISO/IEC 9899:1999):
  • 7.2.1.1 The assert macro (p: 169)
  • Standard C89/C90 (ISO/IEC 9899:1990):
  • 4.2.1.1 The assert macro

Véase también