Code Monkey home page Code Monkey logo

assertx.h's Introduction

assertx.h

Detiene errores lógicos o de ejecución por medio de dos macros.

Instalación

Agrega el archivo assertx.h en la carpeta del proyecto (donde está el código fuente del programa).

Macros

  • assertr(condicion, mensaje) = Esta macro se la usa especialmente en funciones que devuelvan un valor y si la condición llega a ser falsa, detiene la ejecución de la subrutina/función.

  • assertc(condicion, mensaje) = Esta macro se la usa únicamente en bucles. Sí la condición llegara a dar un resultado de falsedad, genera otra iteración y detiene la ejecución del código que esté debajo de dicha macro.

  • CHANGE_VALUE_RETURN = Esta macro cambia el valor de retorno de la macro àssertr (por defecto es 0).

Aplicaciones

  • Un ejemplo para prevenir un error de ejecución, el típico desbordamiento de búfer.
#include "assertx.h"

int main(void)
{
	int array[10];
	int n;
	int i;
	while (1)
	{
		printf("Cuantos elementos quieres en el array?\n");
		scanf("%d", &n);
		assertc(n != 0, "ERROR: 0 elementos? No existe eso")
		assertc(n >= 1 && n <= 10, "ERROR: Posible buffer overflow")
		for (i = 0; i != n; ++i)
			array[i] = i;
		break;
	}
	for (i = 0; i != n; ++i)
		printf("%d\n", array[i]);
	getchar();
	getchar();
	return 0;
}
  • Un ejemplo para prevenir un error lógico.
#include <stdlib.h>

#define CHANGE_VALUE_RETURN EXIT_FAILURE
#include "assertx.h"

int main(void)
{
	int num;
	printf("Ingrese un numero par:\n");
	scanf("%d", &num);
	assertr(num % 2 == 0, "ERROR: No es par.")
	printf("%d es par\n", num);
	getchar();
	getchar();
	return EXIT_SUCCESS;
}

El mensaje de error de la macro assertr & assertc también puede ser una cadena formateada.

  • Ejemplo:
#include "assertx.h"

int main(void)
{
	int option = 0;
	while (!(option >= 1 && option <= 3))
	{
		printf("Ingrese una opcion <1-3>:\n");
		scanf("%d", &option);
		assertc(option >= 1 && option <= 3, "ERROR: El numero %d no es una opcion valida", option)
		switch (option)
		{
			case 1:
				puts("Se cumplio la opcion 1");
				break;
			case 2:
				puts("Se cumplio la opcion 2");
				break;
			case 3:
				puts("Se cumplio la opcion 3");
		}
	}
	getchar();
	getchar();
	return 0;
}

La cadena formateada en ese ejemplo es: "ERROR: El numero %d no es una opcion valida"

Código de prueba

#include "assertx.h"

int function1(void)
{
	int x;
	printf("Ingrese un numero positivo:\n");
	scanf("%d", &x);
	assertr(x >= 0, "ERROR: Debes ingresar un numero positivo.")
	printf("%d es un numero positivo.\n", x);
	return 1;
}

int main(void)
{
	while (1)
	{
		assertc(function1() != 0, "")
		break;
	}
	getchar();
	getchar();
	return 0;
}

Resultado en pantalla

prueba

Créditos

  • MrDave
    • Por el desarrollo de assertx.h
  • Microsoft Corporation
    • Se usó el compilador cl.exe para poder compilar los códigos de prueba, de ese modo se comprueba sí no hubo algún error.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.