10.1 Orden #define


La orden #define permite definir macros. Entre otras cosas, se utiliza para declarar constantes simbólicas:

	#define TAM_VECTOR  100
	...
	struct Datos vector [TAM_VECTOR];

La sintaxis general de este uso de #define es

#define símbolo texto_sustituto

símbolo puede ser cualquier identificador utilizable en C y texto_sustituto es cualquier ristra de caracteres, sin restricción.
El preprocesador trocea el fichero fuente en palabras. Cada vez que se encuentre con la palabra símbolo la sustituye por texto_sustituto, sin tener en cuenta nada más.
Si en el texto_sustituto aparecen palabras que en realidad son macros, se sustituyen.

#define BEGIN	{
#define PROGRAM	main() BEGIN
#define END		}
#define BUCLE	for (i=0;i<N;i++)

...
PROGRAM
	int i;
	BUCLE
	  BEGIN
		printf ( "paso número %d\n", i );
	  END
END


Este ejemplo refleja un abuso del preprocesador, dado que el código no parece C y resulta poco legible.


Hay que tener cuidado con las expresiones en el texto sustituto:

#define DIEZ		10
#define VEINTE	20
#define TREINTA	DIEZ + VEINTE

main()
{
	printf ( "El resultado es: %d\n", 		TREINTA*TREINTA );		/* ¿Qué se obtiene? */
}

En el caso anterior, la solución era definir así la macro:

#define TREINTA	(DIEZ + VEINTE)