Diapositiva 1

Anuncio
EL
PREPROCESADOR
Lenguajes de programación LPSI EUI UPM
• Etapa previa a la compilación
• Prepara el código fuente para ser
compilado
• Permite:
– Definir constantes y macros
– Compilación condicional
– Depurar código
– Compilación por separado
• Todas las directivas (órdenes) del
preprocesador empiezan por ‘#’
Lenguajes de programación LPSI EUI UPM
DEFINICIÓN DE CONSTANTES
#define NOMBRE valor
#define PI 3.141559
#define MAX 1000
#define TITULO “Lenguaje C”
Lenguajes de programación LPSI EUI UPM
DEFINICIÓN DE MACROS
• MACRO: operación definida mediante una
directiva del preprocesador
#define NOMBRE(arg) expresión
#define MAYOR (X, Y) (X) > (Y) ? (X): (Y)
#define AREA_CIRC (R) PI * (R) * (R)
#define PRIM_CAR (CAD) (CAD)[0]
* Para continuar la expresión en la siguiente línea: ‘\’
Lenguajes de programación LPSI EUI UPM
DEFINICIONES
#undef NOMBRE
• Anula una definición anterior de constante
o macro
#undef MAX
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
• Para compilar o no partes del código fuente
#if (cond)
código
#endif
#if (1 == COD_MONEDA)
#define MONEDA “euro”
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#if defined (nombre)
código
#endif
#if defined (TIPOS_)
#define MAX 7890
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#if ! defined (nombre)
código
#endif
#if ! defined (TIPOS_)
#define MAX 100
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#ifdef (nombre)
código
#endif
#ifdef (TIPOS_)
#define MAX 7890
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#ifndef (nombre)
código
#endif
#ifndef (TIPOS_)
#define MAX 100
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#if (cond)
código1
#else
código2
#endif
#if defined (TIPOS_)
#define MAX 7890
#else
#define MAX 100
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#if (cond)
código 1
#elif (cond 2)
código 2
#elif (cond 3)
………….
#else
código n
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN CONDICIONAL
#if defined (EUROPA)
#define MONEDA “euro”
#elif defined (USA)
#define MONEDA “dollar”
#else
#define MONEDA “libra”
#endif
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN POR SEPARADO
• Para compilación por separado
• Incluye el código contenido en un fichero en
otro, normalmente de ficheros cabecera (.h)
#include <nombre>
#include “nombre”
• Con < > se busca el fichero en los directorios
especificados por defecto
• Con “ “ se busca el fichero en el directorio
actual y, si no está, en los especificados por
defecto
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN POR SEPARADO
• Ficheros de cabecera:
– Extensión .h
– Contienen definiciones de constantes, macros,
tipos y prototipos de funciones (que se
implementan en los correspondientes ficheros
de código)
• Ficheros de codigo:
– Extensión .c
– Contienen la implementación de las funciones
y del main
– Main, normalmente se pone en un fichero de
código separado del resto de funciones
Lenguajes de programación LPSI EUI UPM
COMPILACIÓN POR SEPARADO
tipos.h
#ifndef TIPOS_H
#define TIPOS_H
typedef …..
void f1 (int);
char f2 (char, char);
…….
#endif
funciones.c
#include <stdio.h>
#include “tipos.h”
void f1 (int a)
{ ………….
}
Char f2 (char c1, char c)
prog.c
#include <stdio.h>
{ ………….
}
#include “tipos.h”
int main (void)
{ …….}
Lenguajes de programación LPSI EUI UPM
DEPURACIÓN - ASSERT
• Macro assert
• Definida en assert.h
• Usada para depuración de código
assert (expresión)
• Si la expresión es falsa (0), imprime un mensaje
de error, incluyendo el nº de línea del código y el
nombre del programa, y aborta la ejecución
assert (x <= 10)
Lenguajes de programación LPSI EUI UPM
Descargar