Constantes en C (#define)

Curso de C

Contenido del Capítulo

Introducción

Las constantes son aquellos datos que no pueden cambiar a lo largo de la ejecución de un programa.

#include <stdio.h>

int main()
	{
	int radio, perimetro;

	radio = 20;
	perimetro = 2 * 3.1416 * radio;


	printf( "El perímetro es: %i", perimetro  );

	return 0;
	}

radio y perimetro son variables, su valor puede cambiar a lo largo del programa. Sin embargo 20, 2 y 3.1416 son constantes, no hay manera de cambiarlas. El valor 3.1416 no cambia a lo largo del programa , ni entre ejecución y ejecución. Sólo cambiará cuando edites el programa y lo cambies tu mismo. Esto es obvio, y no tiene ningún misterio así que no le des vueltas. Sólo quería indicarlo porque en algunos libros le dan muchas vueltas.

[Arriba]

Constantes con nombre

Supongamos que tenemos que hacer un programa en el que haya que escribir unas cuantas veces 3.1416 (como todos sabreis es PI). Es muy fácil que nos confundamos alguna vez al teclearlo y al compilar el programa no tendremos ningún error, sin embargo el programa no dará resultados correctos. Para evitar esto usamos las constantes con nombre. Al definir una constante con nombre estamos dando un nombre al valor, a 3.1416 le llamamos PI.

Estas constantes se definen de la manera siguiente:

	#define nombre_de_la_constante	valor_de_la_constante

Ejemplo:

#include <stdio.h>

#define PI	3.1416

int main()
	{
	int radio, perimetro;

	radio = 20;
	perimetro = 2 * PI * radio;

	printf( "El perímetro es: %i", perimetro  );

	return 0;
	}

De esta forma cada vez que el compilador encuentre el nombre PI lo sustituirá por 3.1416.

A una constante no se le puede dar un valor mientras se ejecuta, no se puede hacer PI = 20;. Sólo se le puede dar un valor con #define, y sólo una vez. Tampoco podemos usar el scanf para dar valores a una constante:

	#define CONSTANTE	14

	int main()
		{
		...
		scanf( "%i", CONSTANTE );
		...
		}

eso sería como hacer:

	scanf( "%i", 14 );

Esto es muy grave, estamos diciendo que el valor que escribamos en scanf se almacene en la posición 14 de la memoria, lo que puede bloquear el ordenador.

Las constantes se suelen escribir en mayúsculas sólo se puede definir una constante por fila. No se pone ";" al final.

Las constantes nos proporcionan una mejor comprensión del código fuente. Mira el siguiente programa:

#include <stdio.h>

int main()
	{
	int precio;

	precio = ( 4 * 25 * 100 ) * ( 1.16 );

	printf( "El precio total es: %i", precio  );

	return 0;
	}

¿Quien entiende lo que quiere decir este programa? Es difícil si no imposible. Hagámoslo de otra forma.

#include <stdio.h>

#define CAJAS			4
#define UNIDADES_POR_CAJA	25
#define PRECIO_POR_UNIDAD 	100
#define IMPUESTOS		1.16

int main()
	{
	int precio;

	precio = ( CAJAS * UNIDADES_POR_CAJA * PRECIO_POR_UNIDAD ) * ( IMPUESTOS );

	printf( "El precio total es: %i", precio  );

	return 0;
	}

¿A que ahora se entiende mejor? Claro que sí. Los números no tienen mucho significado y si revisamos el programa un tiempo más tarde ya no nos acordaremos qué cosa era cada número. De la segunda forma nos enteraremos al momento.

También podemos definir una constante usando el valor de otras. Por supuesto las otras tienen que estar definidas antes:

#include <stdio.h>

#define CAJAS			4
#define UNIDADES_POR_CAJA	25
#define PRECIO_POR_UNIDAD	100
#define PRECIO_POR_CAJA		UNIDADES_POR_CAJA * PRECIO_POR_UNIDAD
#define IMPUESTOS		1.16

int main()
	{
	int precio;

	precio = ( CAJAS * PRECIO_POR_CAJA ) * ( IMPUESTOS );

	printf( "El precio total es: %i", precio  );

	return 0;
	}

#define tiene más usos aparte de éste, ya los veremos en el capítulo de directivas.

[Arriba]