assert y NDEBUG en C
assert documenta un invariante y lo verifica, hasta que NDEBUG lo elimina por completo.
#include <assert.h>
#include <stddef.h>
int average(const int *values, size_t n) {
assert(values != NULL);
assert(n > 0);
long total = 0;
for (size_t i = 0; i < n; i++) {
total += values[i];
}
return (int) (total / (long) n);
}
void invariants(void) {
int values[3] = {1, 2, 3};
int mean = average(values, 3);
assert(mean == 2);
(void) mean;
}
Cómo funciona
- Un assert que falla imprime la expresión y aborta.
- Definir
NDEBUGelimina todos los assert al compilar. - Así que nunca pongas un efecto secundario adentro de uno.
Palabras clave y builtins usados aquí
NULLconstforintlongreturnsize_tvoid
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 346
- Tokens
- 121
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 73 segundos.
Paso 1 de 2 en Aserciones; paso 10 de 12 en Preprocesador y encabezados.