Te damos la bienvenida a la comunidad de T!Estás a un paso de acceder al mejor contenido, creado por personas como vos.

O iniciá sesión con
¿No tenés una cuenta?
Etapas en la construcción de un programa en Lenguaje C


Directivas de precompilación

#include

Incluyen las definiciones contenidas en el header indicado. La diferencia es que al utilizar los símbolos “<>” la búsqueda se realiza sobre los headers precompilados mientras que al utilizar “” la búsqueda se realiza en el directorio actual o en el path indicado.

Ejemplo:
#include
#include “mislib.h”
#include “..utilsmislib.h”

#define – constante simbólicas

#define CTE valor

Definen una constante simbólica. El precompilador remplaza el nombre de la constante simbólica con el valor asociado a la misma en cada ocurrencia en el código.

Ejemplo:
#define TEXTO “hola mundo”
#define UNVALOR 2
...
printf(TEXTO);
una_variable = UNVALOR + 5;

Constantes predefinidas


#define – macro

#define NombreMacro Codigo_Macro

Definen una macro con el nombre indicado, al encontrarse referencias a dicho nombre en el código, este nombre es reemplazado por el conjunto de acciones correspondientes.
Ejemplo:

#define MAYOR(x, y) x>y?x:y
#define CUBO(x) x*x*x

Se invocarían como:
int z=5, my, c;
my = MAYOR(z, 65);
c = CUBO(2);

Siempre se debe tener en cuenta la forma en la que se realiza la expansión de la macro a la hora de la evaluación. Consideremos:

#define CUBO(x) x*x*x

Supongamos las siguientes invocaciones:
iValor = CUBO(3); //iValor = 3 * 3 * 3;
iValor = CUBO(3 + 4); //iValor = 3+4 * 3+4 * 3+4 = 31

Solución:
#define CUBO(x) ((x)*(x)*(x))

Macros predefinidas
Macro assert
assert es una macro definida en el header assert.h. Esta macro evalúa una condición lógica, si el resultado de la evaluación es falso imprime un mensaje de error y finaliza la aplicación.
Si la evaluación es verdadera, no produce ninguna salida.

Ejemplo:
Desarrolle una aplicación que calcule la raíz cuadrada de un número real ingresado por el usuario. En caso de que el valor sea negativo la aplicación indicar esto como una condición de error finalizando la misma.

Directivas de precompilación


#error y #undef

#error msg_error

Al evaluar el precompilador esta línea indica el mensaje de error al usuario indicado.

#warning msg_war

Similar a la directiva #error, con la diferencia que advierte al usuario pero contínua con el proceso de construcción.

#undef PI

Elimina la definición de una variable simbólica, por ende, cualquier ocurrencia de la misma producirá un error.

#ifdef, #ifndef, #elif, #else, #endif

Permiten realizar definiciones o incluir código fuente a partir de la evaluación de una condición de manera similar a la estructura SI.

#ifdef UNIX
#include

#elif WIN32
#include

#else
#error “- Debe indicar la arquitectura”
#endif
..
#ifdef DEBUG
printf(“Mensajen”);
#endif
Otro ejemplo, supongamos un archivo con definición de funciones llamado util.h y otro archivo con su implementación llamado util.c:

// archivo util.h
#ifndef util_h
#define util_h
#define E 2.71
void funcion_1(void);
void funcion_2(int x);
#endif
Al utilizarse esta definición es posible incluir util.h desde todos los archivos que se quiera sin tener errores de redefiniciones ya que una vez definido util_h no se volverán a tomar en cuenta las definiciones posteriores.

Conclusiones:
* El uso de directivas de precompilación permite alterar el código a compilar. Lográndose de esta manera adecuar el mismo según las necesidades que se tengan o la etapa de desarrollo en la que se encuentre.
* En dispositivos con pocos recursos puede ser preferible el uso de macros de preprocesador a funciones, ya que no se hace uso del stack.
* Ninguna directiva del precompilador se evalúa en tiempo de ejecución. Son evaluadas a la hora de construir los archivos de código objeto.
* Utilizando el compilador gcc de gnu, es posible definir constantes simbólicas desde la línea de órdenes a través del parámetro –D por ejemplo:
gcc –DWIN32 miaplicacion.c

Interactuando directamente con las directivas de precompilación condicional.

http://www.taringa.net/posts/ciencia-educacion/18490906/Programacion-en-C-C-media-y-avanzada-parte-3.html

Informacion sacada de:
Programación en C, C++ y Java
Deitel y Deitel

C Algoritmos, programación y estructuras de datos
Luis Joyanes Aguilar

Diapositivas de power point. (U.T.N. F.R.P.)