Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 4
XO R
BYTE
BIT
10 1 0 001 10 01 1 001
W HILE
HEXA
Seminario de Lenguajes - C
Temario
El Preprocesador
Seminario de Lenguajes - C
Repaso Clase 3
Funciones
Compilacin separada
Seminario de Lenguajes - C
El Preprocesador
Editor
Archivo
Fuente
Archivo
Fuente
Modificado
Compilacin
Pre - Procesador
Seminario de Lenguajes - C
Cdigo
OBJ
.......
Linkedicin
El Preprocesador
archi1.h
archi1.c
al
archi2.h
archi2.c
Seminario de Lenguajes - C
archi3.c
+..
.
Ejecutable
El Preprocesador
Inclusin de textos.
Sustituciones.
El preprocesador
stdio.h
ejemplo-clase3.c
int getc();
#include <stdio.h>
int putc();
int main(void) {
...
printf(Hola Mundo);
int printf();
Compilador
....
Pre Compilacin
Seminario de Lenguajes - C
...
El Preprocesador
Directivas
El Preprocesador
Directivas
#include
#define
#undef
#if - #else - #ifdef - #ifndef - #elif - #endif
Seminario de Lenguajes - C
El Preprocesador - #include
#include nombre
#include <nombre>
Ejemplo:
#include <stdio.h>
#include ../miDirectorio/libreria.h
Seminario de Lenguajes - C
El Preprocesador
GCC
El Preprocesador - #define
#define nombre textoDeReemplazo
Sustituye TODAS las ocurrencias de nombre por
textoDeReemplazo.
Permite definir constantes simblicas
Ejemplo:
#define MAX 100
Seminario de Lenguajes - C
En ejecucin
no ocupa un
lugar en la
memoria.
El Preprocesador - #define
Seminario de Lenguajes - C
El Preprocesador - #define
Errores habituales...
#define MAX =100
if (x == MAX)
if (x == =100)
o
#define MAX 100;
if (x == MAX)
if (x == 100;)
Seminario de Lenguajes - C
El Preprocesador - #define
Errores habituales
#define C A+B
...
D=C*C
A+B*A+B
Forma Correcta
#define C (A+B)
Seminario de Lenguajes - C
El Preprocesador - #define
Permite definir macros parametrizadas
z= ( ((a-3)>=0 )?(a-3):-(a-3));
En C99 pasan a Seminario
llamarsedefunciones
Lenguajes - inline
C
El Preprocesador - #define
z= absoluto(a++)
z= ((a++>=0)?(a++):-(a++) )
Cuntas veces se incrementa a?
Seminario de Lenguajes - C
Seminario de Lenguajes - C
El Preprocesador - #define
Para tener en cuenta....
El Preprocesador - #define
Para tener en cuenta....
#define DOS 2
#define Doble(x) (DOS*(x))
#define Cuadruple(x) (Doble(Doble(x)))
z=(Doble(Doble(A)));
....
z=((DOS*(Doble(A))));
z=Cuadruple(A);
z=((DOS*((DOS*(A)))));
z=((2*(DOS*(A)))));
Seminario de Lenguajes - C
z=((2*(( 2*(A)))));
El Preprocesador - #define
Macros Recursivas
#define X Y
#define Y Z
#define Z X
....
A=X;
A=Y;
A=Z;
A=X;
Seminario de Lenguajes - C
El Preprocesador - #define
Macros Recursivas
Ejemplo
#define sqrt(x) ((x)>0?sqrt(x):0)
sqrt es una funcin para calcular la raz
cuadrada de un nmero definida en math.c
Sin embargo esta macro permite trabajar con
races cuadradas con nmeros negativos.
Seminario de Lenguajes - C
El Preprocesador - #define
Macros predefinidas
__FILE__: Es una cadena de caracteres que
contiene el nombre del archivo fuente
__LINE__: El nmero de lnea actual
__DATE__: fecha de compilacin
__TIME__: hora de la compilacin
__STDC__: 1, si compila ANSI C
Seminario de Lenguajes - C
El Preprocesador - #define
Operadores de Macros
#: Si x es un parmetro de una macro, #x es el
parmetro actual correspondiente representado como
una cadena de caracteres.
Ejemplo
#define comoString(x)
#x
comoString(3) --> 3
comoString(a-b) -->a-b
comoString(3) -->\3\
Seminario de Lenguajes - C
El Preprocesador - #define
Operadores de Macros
--> a + bc
El Preprocesador - #define
Forzando un llamado a funcin ...
Veamos el siguiente ejemplo...
Seminario de Lenguajes - C
El Preprocesador - #define
#define vs. const
const int MAX = 100;
#define MAX 100
Seminario de Lenguajes - C
El Preprocesador - #define
#undef
Permite dejar sin efecto un define previo
#define MAX 12
..
#undef MAX
#define MAX 11
Seminario de Lenguajes - C
El Preprocesador - #if-#else..
Compilacin condicional
El preprocesador permite incorporar o eliminar
sentencias de un cdigo fuente segn la evaluacin de
una expresin.
Directivas
#if - #else - #ifdef - #ifndef - #elif - #endif
#if defined(MAX)
....
#ifdef MAX
.....
Seminario de Lenguajes - C
El Preprocesador - #if-#else..
#include <stdio.h>
define MAX 100
int main(viod) {
#if MAX>99
El Preprocesador - #if-#else..
Compilacin condicional
Usos
#ifdef DEBUG
....sentencias a testear...
#endif
Seminario de Lenguajes - C
Seminario de Lenguajes - C
El Preprocesador - #ifdef#ifndef..
Compilacin condicional
Para verificar si definido o no definido
Usos
#ifndef _HEADER
#define _HEADER
#ifndef MAX
#define MAX 100
#endif
#endif
Seminario de Lenguajes - C
Un ejemplo
#define MARA
int main(void) {
#ifdef MARA
printf(Hola Mara);
#else
printf(Hola!);
#endif
#ifndef ALEJO
printf(Alejo no ha sido definido);
#endif
return 0;
}
Seminario de Lenguajes - C
El Preprocesador
Pensar...Son correctas?
Definir la siguiente macro:
#include archi.c
Seminario de Lenguajes - C
El Preprocesador
La opcin -D
GCC
El Preprocesador
GCC
La opcin -D
Seminario de Lenguajes - C