assert
De cppreference.com
<tbody>
</tbody>
| 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
Ejecuta este código
#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
| causa la terminación anormal del programa (sin limpiarlo) (función) | |
Documentación de C++ para assert
| |