stringtranslate.com

afirmar.h

assert.h es un archivo de encabezado en la biblioteca estándar de C. Define la macro del preprocesador de C e implementa la aserción en tiempo de ejecución en C. assert

assert.h se define en ANSI C como parte de la biblioteca estándar de C. En el lenguaje de programación C++ , assert.h y están disponibles; ambos son funcionalmente equivalentes. [1]<cassert>

Usar

La assertmacro implementa la aserción en tiempo de ejecución. Si la expresión dentro de ella es falsa, la macro imprimirá un mensaje a stderry llamará a abort(), definido en stdlib.h . El mensaje incluye el nombre del archivo de origen y el número de línea de origen de las macros __FILE__y __LINE__, respectivamente. [2] Desde C99 , el nombre de la función de la declaración de aserción se incluye como ( __FUNC__) y la expresión en sí. [3] En ANSI C, la expresión en la assertmacro se define como entero con signo , aunque se puede utilizar cualquier expresión que pueda convertirse implícitamente a un entero con signo. En C99, la assertmacro permite explícitamente cualquier tipo escalar . [4] Dos usos comunes de la assertmacro son afirmar que un puntero no es nulo y garantizar que un índice de matriz esté dentro de los límites. [5]

A continuación se muestra un programa que utiliza la assertmacro. Este programa siempre se evaluará pointercomo falso, ya que pointeres un puntero nulo y no apunta a una ubicación de memoria válida :

#include <assert.h> int main () { void * puntero = 0 ; assert ( puntero ); return 0 ; }         

Al compilar el programa y ejecutarlo, aparecerá un mensaje similar al siguiente:

programa: source.c:5: main: La aserción 'puntero' falló. Se canceló (se realizó un volcado del núcleo)

La definición de la assertmacro cambia según la definición de otra macro, NDEBUG. Si NDEBUGse define como un nombre de macro, la assertmacro se define como #define assert(ignore) ((void)0), [3] por lo que la macro no evalúa la expresión. El uso de NDEBUGpuede afectar el comportamiento general de un programa si una o más assertdeclaraciones contienen efectos secundarios , ya que estas declaraciones no se evalúan. [6]

La assertmacro no incluye un mensaje de error . Sin embargo, se puede utilizar el operador de coma para agregarlo a la expresión impresa, como en . [7]assert(("Not Orwellian", 2 + 2 == 5));

afirmación estática

La static_assertmacro, agregada en C++11 , tiene un propósito similar al de la assertmacro. A diferencia de la assertmacro, static_assertse ejecuta en tiempo de compilación en lugar de en tiempo de ejecución. [8] La implementación original usaba trucos de plantilla. [ cita requerida ] La static_assertmacro acepta una expresión constante que se puede convertir en un valor booleano y un literal de cadena; si la expresión falla, se devuelve el literal de cadena; de lo contrario, la macro no tiene efecto. [8] En C++17 , este mensaje de error de aserción se hizo opcional y el mensaje posterior se omite si no se especifica. [9]

En C11_Static_assert , se agregó la declaración funcionalmente equivalente . assert.h se define static_assertcomo un alias para _Static_assertgarantizar la paridad con C++ . [10] En C23 , _Static_assertse renombró como static_asserty el argumento literal de cadena se hizo opcional. [11] [12] Gnulib define static_assertpara plataformas que no usan C11 y no requieren que se incluya assert.h . [13]

Referencias

Citas

  1. ^ Binder 2000, pág. 860.
  2. ^ Kernighan y Ritchie 1988, pág. 253-254.
  3. ^ ab ISO/IEC JTC 1/SC 22/WG14 1999, pág. 169.
  4. ^ "Manual del programador de Linux". 25 de agosto de 2002. Consultado el 14 de marzo de 2023 .
  5. ^ Reekie, John (7 de diciembre de 1995). "Cómo usar aserciones en C". Universidad de California, Berkeley . Consultado el 14 de marzo de 2023 .
  6. ^ Instituto Nacional Americano de Normas 1990, pág. 76.
  7. ^ Gregoire 2021, pág. 1058.
  8. ^ ab ISO/IEC JTC 1/SC 22/WG21 2012, pág. 134.
  9. ^ Swaminathan 2017, pág. 13.
  10. ^ Prata 2013, pág. 762-763.
  11. ^ Gustedt 2022, pág. 3.
  12. ^ Ballman y Grammatech 2018, pág. 1.
  13. ^ "GNU Gnulib". Free Software Foundation . 6 de febrero de 2023. Consultado el 14 de marzo de 2023 .

Bibliografía