Sie sind auf Seite 1von 47

Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on

Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Explicaci on de la pr actica 3
Modularizaci on Seminario de Lenguajes opci on C
Facultad de Inform atica Universidad Nacional de La Plata

Ejemplo

2013

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Indice
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Ejemplo

Introducci on Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Objetivos
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Legibilidad. Divisi on de trabajo. Creaci on de bibliotecas. Hacer manejable un proyecto grande.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Objetivos
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Legibilidad. Divisi on de trabajo. Creaci on de bibliotecas. Hacer manejable un proyecto grande.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Objetivos
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Legibilidad. Divisi on de trabajo. Creaci on de bibliotecas. Hacer manejable un proyecto grande.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Objetivos
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Legibilidad. Divisi on de trabajo. Creaci on de bibliotecas. Hacer manejable un proyecto grande.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

C omo hacerlo correctamente


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Agrupar el c odigo por funcionalidad. Agrupar por estructuras de datos. Dividir m odulos grandes en otros m as manejables. Interfaz separada de implementaci on. Interfaz declaraciones (no generan c odigo ni reservan espacio de memoria).

Prototipos de funciones. Macros. typedefs. Declaraci on de variables extern.

Ejemplo

Implementaci on deniciones (generan c odigo y/o

reservan espacio en memoria).


Deniciones de variables (static/extern/autom aticas). C odigo de funciones.
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

Ejemplo de la pr actica 2
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

En la pr actica 2 (el int erprete de BF) se diferenciaban 2 m odulos m as el programa principal:


1

bf.* Operaciones y declaraciones espec cas del lenguaje BF. ivector.* Operaciones y declaraciones espec cas de la estuctura ivector t.

Ejemplo

Analicemos el c odigo del u ltimo...

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Ejemplo de la pr actica 2
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

En la pr actica 2 (el int erprete de BF) se diferenciaban 2 m odulos m as el programa principal:


1

bf.* Operaciones y declaraciones espec cas del lenguaje BF. ivector.* Operaciones y declaraciones espec cas de la estuctura ivector t.

Ejemplo

Analicemos el c odigo del u ltimo...

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Ejemplo de la pr actica 2
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

En la pr actica 2 (el int erprete de BF) se diferenciaban 2 m odulos m as el programa principal:


1

bf.* Operaciones y declaraciones espec cas del lenguaje BF. ivector.* Operaciones y declaraciones espec cas de la estuctura ivector t.

Ejemplo

Analicemos el c odigo del u ltimo...

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Ejemplo de la pr actica 2
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

En la pr actica 2 (el int erprete de BF) se diferenciaban 2 m odulos m as el programa principal:


1

bf.* Operaciones y declaraciones espec cas del lenguaje BF. ivector.* Operaciones y declaraciones espec cas de la estuctura ivector t.

Ejemplo

Analicemos el c odigo del u ltimo...

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Listing 1: ejemplos/ep4/ivector.h
#i f n d e f #d e f i n e CVECTOR H CVECTOR H

#i n c l u d e < s t d l i b . h> #d e f i n e GROW FACTOR 1024 #d e f i n e SHRINK FACTOR GROW FACTOR / 2 struct ivector { i n t * d a t a ; ///< B u f f e r de d a t o s i n t s i z e ; ///< Tama no usado d e l v e c t o r i n t r e s e r v e d ; ///< Tama no a l o c a d o para e l v e c t o r }; typedef struct ivector i v e c t o r t ; i v e c t o r t ivector new () ; void ivector append ( i v e c t o r t * vector , i n t element ) ; int ivector remove last ( ivector t * vector ) ; void i v e c t o r f r e e ( i v e c t o r t * vector ) ; #d e f i n e i v e c t o r p u s h ( v , e ) i v e c t o r a p p e n d ( ( v ) , ( e ) ) #d e f i n e i v e c t o r p o p ( v ) i v e c t o r r e m o v e l a s t ( ( v ) ) char * i v e c t o r a s s t r i n g ( i v e c t o r t vector ) ; #e n d i f

Listing 2: ejemplos/ep4/ivector.c
#i n c l u d e i v e c t o r . h #i n c l u d e < s t d i o . h> #i n c l u d e < a s s e r t . h> i v e c t o r t ivector new () { ivector t n; n . size = n . reserved = 0; n . d a t a = NULL ; return n ; } char * i v e c t o r a s s t r i n g ( i v e c t o r t v ){ int i ; char * s = malloc ( ( v . s i z e + 1) * s i z e o f ( char ) ) ; f o r ( i = 0 ; i < v . s i z e ; i ++){ s [ i ] = v . data [ i ] ; } s [ i ] = 0; return s ; } v o i d i v e c t o r a p p e n d ( i v e c t o r t *v , i n t e ) { v> s i z e ++; i f ( v> s i z e > v> r e s e r v e d ) { v> r e s e r v e d += GROW FACTOR ;

Visibilidad
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Se puede cambiar la visibilidad de un objeto externo (global):


static Visible solamente en el archivo o bloque actual. extern Visible a quienes incluyan esta declaraci on.

Las funciones y variables globales siempre son extern a menos que se declaren static.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Visibilidad
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Se puede cambiar la visibilidad de un objeto externo (global):


static Visible solamente en el archivo o bloque actual. extern Visible a quienes incluyan esta declaraci on.

Las funciones y variables globales siempre son extern a menos que se declaren static.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Visibilidad
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Se puede cambiar la visibilidad de un objeto externo (global):


static Visible solamente en el archivo o bloque actual. extern Visible a quienes incluyan esta declaraci on.

Las funciones y variables globales siempre son extern a menos que se declaren static.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Visibilidad
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Se puede cambiar la visibilidad de un objeto externo (global):


static Visible solamente en el archivo o bloque actual. extern Visible a quienes incluyan esta declaraci on.

Las funciones y variables globales siempre son extern a menos que se declaren static.

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Visibilidad: Ejemplo
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

visibilidad.c
s t a t i c i n t f u n c 1 ( ) { . . . } // L o c a l a e s t e a r c h i v o i n t f u n c 2 ( ) { . . . } // E x t e r n i n t x ; // E x t e r n s t a t i c i n t y ; // L o c a l a e s t e a r c h i v o

visibilidad.h
s t a t i c i n t f u n c 1 ( ) ; // No t i e n e s e n t i d o . . . i n t f u n c 2 ( ) ; // P e r m i t e u s a r l a en o t r o s . c e x t e r n i n t x ; // Lo mismo e x t e r n i n t y ; // Es un e r r o r . . .

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Visibilidad: Ejemplo
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

visibilidad.c
s t a t i c i n t f u n c 1 ( ) { . . . } // L o c a l a e s t e a r c h i v o i n t f u n c 2 ( ) { . . . } // E x t e r n i n t x ; // E x t e r n s t a t i c i n t y ; // L o c a l a e s t e a r c h i v o

visibilidad.h
s t a t i c i n t f u n c 1 ( ) ; // No t i e n e s e n t i d o . . . i n t f u n c 2 ( ) ; // P e r m i t e u s a r l a en o t r o s . c e x t e r n i n t x ; // Lo mismo e x t e r n i n t y ; // Es un e r r o r . . .

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Static en una variable interna


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Las variables autom aticas se alocan al entrar en un bloque y se liberan al salir. Se puede tener una variable local no autom atica con static, su tiempo de vida ser a desde que se ejecuta hasta que termina el programa. funcs.c
void funcion () { s t a t i c i n t x = 0 ; // Se va i n c r e m e n t a n d o i n t y = 0 ; // S o lo l l e g a hasta 1 y se pierde x++; y++; p r i n t f ( x = %d , y = %d \ n , x , y ) ; }

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Static en una variable interna


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Las variables autom aticas se alocan al entrar en un bloque y se liberan al salir. Se puede tener una variable local no autom atica con static, su tiempo de vida ser a desde que se ejecuta hasta que termina el programa. funcs.c
void funcion () { s t a t i c i n t x = 0 ; // Se va i n c r e m e n t a n d o i n t y = 0 ; // S o lo l l e g a hasta 1 y se pierde x++; y++; p r i n t f ( x = %d , y = %d \ n , x , y ) ; }

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Static en una variable interna


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Las variables autom aticas se alocan al entrar en un bloque y se liberan al salir. Se puede tener una variable local no autom atica con static, su tiempo de vida ser a desde que se ejecuta hasta que termina el programa. funcs.c
void funcion () { s t a t i c i n t x = 0 ; // Se va i n c r e m e n t a n d o i n t y = 0 ; // S o lo l l e g a hasta 1 y se pierde x++; y++; p r i n t f ( x = %d , y = %d \ n , x , y ) ; }

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Doble inclusi on
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

El preprocesador copia c odigo por cada include que hagamos. Ejemplo trivial: vector.h
typedef struct vector { void * datos ; unsigned tam logico ; unsigned tam alocado ; } vector t ; /* . . . */

Ejemplo

programa.c
#i n c l u d e v e c t o r . h #i n c l u d e v e c t o r . h /* . . . */
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

Doble inclusi on
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

El preprocesador copia c odigo por cada include que hagamos. Ejemplo trivial: preprocesado.E
typedef struct void * datos ; unsigned tam unsigned tam } vector t ; typedef struct void * datos ; unsigned tam unsigned tam } vector t ; vector { logico ; alocado ; vector { logico ; alocado ;

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Ejemplo m as complicado
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Suponer el caso de un programa que usa pilas y colas. Ambas implementadas con un vector. programa.c
#i n c l u d e p i l a #i n c l u d e c o l a i n t main ( ) { /* . . . return } . h . h

*/ 0;

Ejemplo

programa.c
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

Ejemplo m as complicado
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Suponer el caso de un programa que usa pilas y colas. Ambas implementadas con un vector. pila.h
#i n c l u d e v e c t o r . h typedef vector t pila t ; /* . . . */

pila.h programa.c

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Ejemplo m as complicado
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Suponer el caso de un programa que usa pilas y colas. Ambas implementadas con un vector. vector.h
typedef struct vector { void *datos ; unsigned tam logico ; unsigned tam alocado ; } vector t ; /* . . . */

vector.h pila.h programa.c

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Ejemplo m as complicado
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Suponer el caso de un programa que usa pilas y colas. Ambas implementadas con un vector. cola.h
#i n c l u d e v e c t o r . h typedef vector t cola t ; /* . . . */

vector.h pila.h cola.h

Ejemplo

programa.c
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

Ejemplo m as complicado
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Suponer el caso de un programa que usa pilas y colas. Ambas implementadas con un vector. vector.h
typedef struct vector { void *datos ; unsigned tam logico ; unsigned tam alocado ; } vector t ; /* . . . */

vector.h pila.h cola.h

Ejemplo

programa.c
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

Ejemplo m as complicado
Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Suponer el caso de un programa que usa pilas y colas. Ambas implementadas con un vector.

vector.h
C omo evitar la doble inclusi on sin que el usuario de los .h se tenga que preocupar?

pila.h

cola.h

Ejemplo

programa.c
Seminario de Lenguajes opci on C Explicaci on de la pr actica 3

Evitar la doble inclusi on


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Existe un mecanismo para evitar la doble inclusi on sin que el usuario de los .h se entere: #ifndef PILA H #define PILA H on, pero // la forma PILA H es una convenci // podr a ser cualquier nombre... // Declaraciones normales del .h ... #endif stdint.h parte de la librer a est andar
#i f n d e f STDINT H #d e f i n e STDINT H // e l c o n t e n i d o de s t d i n t . h . . . #e n d i f / * s t d i n t . h * /

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Evitar la doble inclusi on


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Existe un mecanismo para evitar la doble inclusi on sin que el usuario de los .h se entere: #ifndef PILA H #define PILA H // la forma PILA H es una convenci on, pero // podr a ser cualquier nombre... // Declaraciones normales del .h ... #endif stdint.h parte de la librer a est andar
#i f n d e f STDINT H #d e f i n e STDINT H // e l c o n t e n i d o de s t d i n t . h . . . #e n d i f / * s t d i n t . h * /

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Evitar la doble inclusi on


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Existe un mecanismo para evitar la doble inclusi on sin que el usuario de los .h se entere: #ifndef PILA H #define PILA H // la forma PILA H es una convenci on, pero // podr a ser cualquier nombre... // Declaraciones normales del .h ... #endif stdint.h parte de la librer a est andar
#i f n d e f STDINT H #d e f i n e STDINT H // e l c o n t e n i d o de s t d i n t . h . . . #e n d i f / * s t d i n t . h * /

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Evitar la doble inclusi on


Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on
Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Existe un mecanismo para evitar la doble inclusi on sin que el usuario de los .h se entere: #ifndef PILA H #define PILA H // la forma PILA H es una convenci on, pero // podr a ser cualquier nombre... // Declaraciones normales del .h ... #endif stdint.h parte de la librer a est andar
#i f n d e f STDINT H #d e f i n e STDINT H // e l c o n t e n i d o de s t d i n t . h . . . #e n d i f / * s t d i n t . h * /

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on


Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Hacer que ivector as string() no se pueda utilizar desde

otros archivos.
Agregar un contador de ivectors creados que sea accesible

desde otros archivos..

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3

Explicaci on de la pr actica 3 Seminario de Lenguajes opci on C Introducci on


Objetivos C omo hacerlo correctamente Ejemplo de la pr actica 2 Visibilidad Tiempo de vida Doble inclusi on Evitar la doble inclusi on

Hacer que ivector as string() no se pueda utilizar desde

otros archivos.
Agregar un contador de ivectors creados que sea accesible

desde otros archivos..

Ejemplo

Seminario de Lenguajes opci on C

Explicaci on de la pr actica 3