Cómo utilizar afirmar
Después de una cierta comprensión, tengo una cierta comprensión de su función y uso. El uso de afirmar () es como una especie de "programación de contrato", en mi opinión, su expresión. es que el programa puede funcionar normalmente y bien según mis suposiciones. En realidad, es equivalente a una declaración if:
si (la suposición es verdadera)
{
. El programa se ejecuta normalmente;
}
else
{
¡Informe un error y finalice el programa! (Para evitar errores mayores causados por la ejecución del programa)
}
Pero si se escribe así, habrá innumerables declaraciones if, e incluso los paréntesis de una declaración if aparecerán en el file Desde el principio hasta el final del archivo, y en la mayoría de los casos, las suposiciones que queremos verificar son solo eventos accidentales, o simplemente queremos probar si ocurren algunos de los peores escenarios, así que aquí está afirmar().
El prototipo de la macro afirmar está definido en afirmar.h. Su función es finalizar la ejecución del programa si su condición devuelve un error.
1 #include "assert.h"
p>2 void afirmar( int expresión );
La función de afirmar es calcular la expresión expresión. Si su valor es falso (es decir, 0), primero imprime un mensaje de error. a stderr y luego llama a abortar para finalizar el programa.
La desventaja de utilizar afirmar es que las llamadas frecuentes afectarán en gran medida el rendimiento del programa y agregarán una sobrecarga adicional.
Después de la depuración, puede deshabilitar la llamada de aserción insertando #define NDEBUG antes de la declaración que contiene #include. El código de muestra es el siguiente:
1 #include
<. p >2 #define NDEBUG3 #include
Resumen de uso y precauciones:
1) Verifique la legalidad de los parámetros pasados al comienzo del function
p>Por ejemplo:
1 int resetBufferSize(int nNewSize)
2 {
3 //Función: cambiar el tamaño del búfer,
4 //Parámetro: nNewSize nueva longitud del búfer
5 //Valor de retorno: longitud actual del búfer
6 //Explicación: Mantener el contenido de la información original nNewSize sin cambios <=0 significa borrar el búfer
7 afirmar(nNewSize >= 0
8 afirmar(nNewSize <= MAX_BUFFER_SIZE
<); p> 910 ...
11 }
2) Cada aserción solo prueba una condición, porque cuando se prueban múltiples condiciones al mismo tiempo, si la aserción falla, no se puede juzgar intuitivamente qué condición falló
Mala: afirmar(nOffset>=0 && nOffset+nSize<=m_nInfomationSize
Buena: afirmar(nOffset >); = 0);
afirmar(nOffset+nSize <= m_nInfomationSize);
3) No puede utilizar declaraciones que cambien el entorno, porque afirmar sólo toma efecto en DEBUG Si hace esto, utilizará El programa encontró un problema cuando en realidad se estaba ejecutando
Error: afirmar(i++ < 100)
Esto se debe a que se produjo un error. ocurre, como i = 100 antes de la ejecución, entonces esta declaración no se ejecutará y luego el comando i++ no se ejecutará.
Correcto: afirmar(i < 100)
i++;
4) afirmar y las siguientes declaraciones deben ser una línea en blanco , para formar una sensación de coherencia lógica y visual
5) En algunos lugares, afirmar no puede reemplazar el filtrado condicional
Los programas generalmente se dividen en versión de depuración y versión de lanzamiento. Se utiliza para la depuración interna. La versión de lanzamiento se lanza a los usuarios. Assert es una macro que sólo funciona en la versión de depuración. Se utiliza para comprobar situaciones que "no deberían" ocurrir. El siguiente es un programa de copia de memoria Durante el proceso de ejecución, si el parámetro de aserción es falso, el programa finalizará (generalmente aparecerá un cuadro de diálogo para explicar dónde se activó la aserción).
Los siguientes son varios principios para el uso de aserciones:
(1) Utilice aserciones para capturar situaciones ilegales que no deberían ocurrir. No confunda la diferencia entre situaciones ilegales y situaciones de error; estas últimas siempre existen y deben abordarse.
(2) Utilice aserciones para confirmar los parámetros de la función.
(3) Al escribir una función, debe realizar exámenes repetidos y preguntarse: "¿Qué suposiciones planeo hacer?" Una vez determinadas las suposiciones, se deben utilizar afirmaciones para verificarlas.
(4) Los libros de texto generales alientan a los programadores a realizar una programación a prueba de errores, pero recuerde que este estilo de programación ocultará los errores. Cuando programe para detectar errores, utilice aserciones para alertarle si sucede algo "imposible".
ASSERT () es una macro que se utiliza a menudo al depurar programas. Cuando el programa se está ejecutando, evalúa la expresión entre paréntesis. Si la expresión es FALSA (0), el programa informará un error y finalizará. ejecución. Si la expresión no es 0, continúe ejecutando las siguientes declaraciones. Esta macro normalmente determina si aparecen datos obviamente ilegales en el programa. En caso afirmativo, finaliza el programa para evitar consecuencias graves y también facilita la búsqueda de errores.
ASSERT solo es válido en la versión de depuración y se ignora si se compila en una versión de lanzamiento.