Está en la página 1de 82

PROGRAMACIÓN

Curso 0: Programación

Alberto Sánchez <alberto.sanchez@urjc.es>


Alberto Sánchez 

Escuela Técnica Superior de Ingeniería Informática 1
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 2
Definiciones
PROGRAMACIÓN

ƒ O
Ordenador: máquina sin inteligencia propia, cuya finalidad es 
d d á i i i t li i i fi lid d
interpretar el código (instrucciones) que se les proporciona
ƒ Lenguaje máquina: lenguaje que la computadora "entiende" y 
g j q g j q p y
es capaz de ejecutar (Os y 1s)
ƒ Lenguaje de programación: medio de comunicación entre el 
programador y el ordenador El programador escribe en algún
programador y el ordenador. El programador escribe en algún 
lenguaje de programación y utiliza las herramientas provistas 
(compiladores, etc.) por ese lenguaje para transformarlo en 
lenguaje máquina
lenguaje máquina.
ƒ Programa: secuencia de órdenes a ser ejecutadas por el 
ordenador escrito en algún lenguaje de programación
ƒ Algoritmo: secuencia de instrucciones que permiten obtener 
un resultado en particular. Ej: receta de cocina

Escuela Técnica Superior de Ingeniería Informática 3
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 4
Características del lenguaje C
PROGRAMACIÓN

ƒ C es uno de los lenguajes de programación más 
extendidos hoy en día
ƒ Historia de C:
Historia de C:
ƒ 1970 Bell desarrolla un nuevo S.O. para PDP‐11 ‐> UNICS ‐> 
UNIX. Difícil de programar en PDP‐11
p g
ƒ 1972 Dennis Ritchie diseña el lenguaje de programación C
ƒ Fabricantes crean sus propios compiladores ‐> pérdida de 
p p p p
portabilidad
ƒ 1980 Estandarización de C. ANSI C
ƒ 1983 surge C++, versión de C orientada a objetos (Bjarne 
Stroustrup)

Escuela Técnica Superior de Ingeniería Informática 5
Características de C
PROGRAMACIÓN

ƒ Sencillez
ƒ Estructurado: su esquema de programación es 
imperativo vs. Orientado a objetos (C++, Java, …). 
C it
Consiste en escribir una secuencia de instrucciones una 
ibi i d i t i
detrás de la otra, las cuales se ejecutarán en orden.
ƒ Compilado. Las órdenes son transformadas a lenguaje 
Compilado Las órdenes son transformadas a lenguaje
máquina que se almacena en un archivo ejecutable.
ƒ Potente. Aunque es un lenguaje de alto nivel, tiene 
Potente. Aunque es un lenguaje de alto nivel, tiene
capacidades de bajo nivel
ƒ Un lenguaje es de bajo nivel cuanto más cercano esté al código 
máquina. 
ƒ Un lenguaje que es de alto nivel cuanto más cercano esté del 
lenguaje humano.
lenguaje humano.

Escuela Técnica Superior de Ingeniería Informática 6
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 7
Programación estructurada
PROGRAMACIÓN

ƒ La programación estructurada sigue tres reglas: 
ƒ Secuencia: las instrucciones del código se leen una detrás 
de otra 
ƒ Iteración: según cierta condición, un número de 
i t
instrucciones puede repetirse un numero determinado de 
i d ti d t i d d
veces 
ƒ Decisión: según ciertas condiciones se ejecutan o no un 
Decisión: según ciertas condiciones se ejecutan o no un
conjunto de instrucciones

Escuela Técnica Superior de Ingeniería Informática 8
Estructura de un programa
PROGRAMACIÓN

ƒ En la programación estructurada tiene que existir un inicio y un fin 
pe ecta e te de do de acue do a d ag a a de ujo de
perfectamente definido de acuerdo al diagrama de flujo del 
programa

ƒ Un
Un programa bien estructurado debería tener algún subprograma 
programa bien estructurado debería tener algún subprograma
que capture cualquier error dentro del programa
Escuela Técnica Superior de Ingeniería Informática 9
Primer programa
PROGRAMACIÓN

#i nc l ude <s t di o. h>

i nt mai n( )
{
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}

ƒ #include : es una directiva de preprocesador. Lo que 
p p q
hace es copiar todo el código del archivo stdio.h y 
pegarlo en esa línea.
ƒ int main(): es la función que hace de punto de 
entrada del programa. Todo programa en C debe 
tener una función main. 
Escuela Técnica Superior de Ingeniería Informática 10
Primer programa
PROGRAMACIÓN

#i nc l ude <s t di o. h>

i nt mai n( )
{
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}

ƒ printf
printf : es una llamada a una función de biblioteca, 
: es una llamada a una función de biblioteca,
que imprime un string en la pantalla.
ƒ “Hola
Hola mundo\n
mundo\n”:: es un string
es un string constante. El caracter 
constante El caracter
‘\n’ indica un salto de línea.
ƒ return: es el valor de retorno de la función.
t l l d t d l f ió
Escuela Técnica Superior de Ingeniería Informática 11
Primer programa
PROGRAMACIÓN

#i nc l ude <s t di o. h>

i nt mai n( )
{
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}

ƒ Las
Las sentencias acaban en 
sentencias acaban en ‘;’ ;
ƒ Las llaves { } se utilizan para definir bloques de código 
que forman el cuerpo de determinadas sentencias
que forman el cuerpo de determinadas sentencias, 
en este caso una función.

Escuela Técnica Superior de Ingeniería Informática 12
Comentarios
PROGRAMACIÓN

ƒ Comentario: líneas de texto que el compilador o el 
intérprete no consideran como parte del código, con 
lo cual no están sujetas a restricciones de sintaxis. 
Sirven para aclarar partes de código en posteriores 
lecturas y, en general, para anotar cualquier cosa que 
el programador considere oportuno.
ƒ Es una prioridad documentar el código fuente ya que 
al momento de depurar ahorra mucho tiempo de 
análisis para su corrección o estudio.

Escuela Técnica Superior de Ingeniería Informática 13
Comentarios
PROGRAMACIÓN

#i nc l ude <s t di o. h>

/ * Punt o de ent r ada


del p pr ogr
g ama * /
i nt mai n( )
{
/ / Ll amada a pr i nt f
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}

ƒ Se pueden introducir comentarios dentro del código.
Se pueden introducir comentarios dentro del código.
ƒ Con // se introduce un comentario de una sola línea.
ƒ Con /*  y  */  se introducen comentarios multilínea.
C /* */ i t d t i ltilí
Escuela Técnica Superior de Ingeniería Informática 14
Proceso de construcción
PROGRAMACIÓN

ƒ Preprocesado: Las directrices que comienzan por # 
son directrices del preprocesador. Son interpretadas 
por el preprocesador, normalmente con 
sustituciones.
ƒ Compilación: El código fuente ya preprocesado se 
El código fuente ya preprocesado se
transforma en código máquina.
ƒ Enlazado: se integra todo el código objeto de las 
Enlazado: se integra todo el código objeto de las
distintas unidades compiladas en un solo programa 
ejecutable.
ejecutable

Escuela Técnica Superior de Ingeniería Informática 15
Proceso de construcción
PROGRAMACIÓN

ƒ El compilador que se utiliza habitualmente en 
entornos UNIX (como Linux) es gcc (GNU C Compiler)
ƒ Sintaxis:
ƒ gcc archivo.c –o archivo: Preprocesa, compila y enlaza 
archivo.c generando el ejecutable archivo
g j
ƒ gcc archivo.c –c –o archivo.o: Preprocesa y compila  
archivo.c generando el fichero objeto archivo.o
ƒ gcc archivo.o  –o archivo: Enlaza archivo.o y genera el 
ejecutable archivo
ƒ Entornos de compilación completos: Visual Studio, 
Dev C++

Escuela Técnica Superior de Ingeniería Informática 16
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 17
Variables y constantes
PROGRAMACIÓN

ƒ El
El ordenador sigue una serie de instrucciones. Pero 
d d i i d i i P
esas instrucciones tienen que operar sobre una serie 
de datos El ordenador típico sólo procesa una
de datos. El ordenador típico sólo procesa una 
instrucción a la vez, por lo que necesita 'espacios de 
memoria' donde guardar o depositar, a modo de 
memoria donde guardar o depositar a modo de
cajones, los diversos datos con los que trabaja. Estos 
espacios de memoria corresponden:
p p
ƒ Variables: pensadas para ser leídas y modificadas
ƒ Constantes: para datos que no pensamos modificar (ej: 
valor Pi para calcular el perímetro o área de un círculo). No 
puedan ser reescritas. 

Escuela Técnica Superior de Ingeniería Informática 18
Tipos de datos elementales
PROGRAMACIÓN

ƒ c har : carácter
ƒ i nt : entero con signo
ƒ uns i gned i nt : entero sin signo
: entero sin signo
ƒ l ong : entero largo con signo
ƒ uns i gned l ong : entero largo sin signo
ƒ f l oat : número en coma flotante, precisión simple
ƒ doubl e : número en coma flotante, doble precisión 
ƒ v oi d : tipo vacío
: tipo vacío

Escuela Técnica Superior de Ingeniería Informática 19
Tipos de datos derivados 
PROGRAMACIÓN

ƒ Tipos enumerados
Ti d
ƒ Rango de valores pequeño
ƒ Cada valor identificado por un nombre
p

ƒ enum tMesesAnyo {enero=1, febrero, marzo, abril, mayo, 
j i j li
junio, julio, agosto, septiembre, octubre, noviembre, 
t ti b t b i b
diciembre};

ƒ Definición de tipos con typedef
ƒ Permite crear nuevos tipos de datos
ƒ Mejora legibilidad del código
ó
typedef <tipo> <alias>;

Escuela Técnica Superior de Ingeniería Informática 20
Declaración de variables
PROGRAMACIÓN

/ * Var i abl es gl obal es * /


i nt i ;
i nt j = 10;
f l oat k , l ;
s t at i c c har m;

i nt f unc i on( )
{
/ * Var i abl es l oc al es * /
c har c ;
c har d = ‘ A’ ;
s t at i c i nt e;
. . .
. . .

r et ur n 0;
}
Escuela Técnica Superior de Ingeniería Informática 21
Declaración de variables
PROGRAMACIÓN

ƒ Tipos de variables
Tipos de variables
ƒ Global: si se declara fuera de cualquier 
f ió S
función. Se puede acceder a ella desde 
d d ll d d
cualquier función.
ƒ Local: se declaran dentro de una función, y 
solo son visibles desde el bloque donde se
solo son visibles desde el bloque donde se 
declaran.

Escuela Técnica Superior de Ingeniería Informática 22
Variables externas
PROGRAMACIÓN

ƒ Variables globales: visibles por todas las funciones de 
un mismo fichero
ƒ Variables externas: para compartir variables globales 
entre diferentes ficheros, han de ser declaradas en 
los ficheros donde se desea como compartir como 
variables extern con el mismo nombre y tipo.
ƒ Esta declaración no reserva memoria: variables 
declaradas pero no definidas
p

Escuela Técnica Superior de Ingeniería Informática 23
Variables estáticas
PROGRAMACIÓN

ƒ Se declaran al principio de un bloque con static
ƒ Son visibles dentro de ese bloque
ƒ Al finalizar el bloque no se destruyen, conservando 
su valor entre distintas ejecuciones del bloque al que
su valor entre distintas ejecuciones del bloque al que 
pertenecen
ƒ Una
Una variable global estática solo es accesible desde el 
variable global estática solo es accesible desde el
fichero donde está declarada.
ƒ Una variable local estática conserva el valor entre distintas 
llamadas a la función.

Escuela Técnica Superior de Ingeniería Informática 24
Declaración de constantes
PROGRAMACIÓN

ƒ Varias formas de declararlas:
ƒ Usando la directiva del preprocesador #define:
#def i ne MAX_SI ZE 64
ƒ Usando un tipo enumerado:
enum{
MAX_SI
AX SI ZE = 64,
64
};
ƒ Usando const :
Usando const :
c ons t i nt MAX_SI ZE = 64;

Escuela Técnica Superior de Ingeniería Informática 25
Constantes 
PROGRAMACIÓN

ƒ Constantes carácter: encerrado entre apóstrofes
ƒ Uso de \ para caracteres especiales
Representación Descripción Carácter Descripción ASCII
‘\n’ Nueva línea LF 10
‘\r’ Retorno de carro CR 13
‘\ ’
‘\t’ Tabulación 
b l ió HT 9
‘\b’ Espacio  BS 8
\\
‘\\’ Barra invertida
Barra invertida \ 92
‘\’’ Comilla simple ‘ 39
‘\”’ Doble comilla ’“ 34

ƒ Cadenas de caracteres: secuencia de caracteres 
encerrada entre comillas “ ”. 
ƒ el compilador añade al final el carácter nulo ‘\0’
Escuela Técnica Superior de Ingeniería Informática 26
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 27
Operadores
PROGRAMACIÓN

ƒ Aritméticos:
ƒ +, - , * , / , % : suma, resta, multiplicación, división y 
resto de la división entera.
ƒ Lógicos: no existe un tipo de datos boolean. En C se 
utilizan enteros. 0 es falso y distinto de 0 es 
y
verdadero:
ƒ &&,, | | , ! : and, or y not.
, y
ƒ Relacionales (devuelven un entero: 0 ‐> falso, distinto 
de 0 ‐>> verdadero):
de 0  verdadero):
ƒ >, >=, <, <=, ==, ! = : mayor, mayor o igual, menor, 
menor o igual, igual, distinto.
menor o igual, igual, distinto.

Escuela Técnica Superior de Ingeniería Informática 28
Operadores
PROGRAMACIÓN

ƒ Asignación:
ƒ a = b : asigna a a el valor de b
ƒ a++,, ++a,, a- - , - - a : p
postincremento, preincremento, 
,p ,
postdecremento, predecremento
ƒ +=, - =, * =, / = : suma, resta, multiplicación y división con 
asignación.
ƒ Ejemplo: a += b; es equivalente a: a = a + b;
ƒ Otros:
ƒ s i z eof ( v ar i abl e o t i po) : tamaño en memoria de la 
variable o tipo

Escuela Técnica Superior de Ingeniería Informática 29
Operadores
PROGRAMACIÓN

ƒ Conversión de tipos: 
ƒ Implícita: 
ƒ En expresiones el tipo mas bajo promociona al mas alto long 
double > double > float > unsigned long long > long long > 
unsigned long > long > unsigned int > int > unsigned short >
unsigned long > long > unsigned int > int > unsigned short > 
short > unsigned char > char
ƒ En asignaciones el valor del lado derecho se convierte al tipo 
g p
de la variable de la izquierda
ƒ Explicita (casting)
ƒ (tipo) expresion

Escuela Técnica Superior de Ingeniería Informática 30
Operadores
PROGRAMACIÓN

ƒ Precedencia
P d i
ƒ Prioridad de unos 
operadores frente a otros
operadores frente a otros
ƒ Puede modificarse con 
p
paréntesis

ƒ Asociatividad
ƒ define el orden de 
ejecución para 
operadores con idéntica 
d dé
precedencia

Escuela Técnica Superior de Ingeniería Informática 31
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 32
Estructuras de control
PROGRAMACIÓN

ƒ P
Permiten modificar el flujo de ejecución de las 
it difi l fl j d j ió d l
instrucciones de un programa.
ƒ Con las estructuras de control se puede hacer:
Con las estructuras de control se puede hacer:
ƒ Selección: De acuerdo a una condición, ejecutar un grupo u otro 
de sentencias (if‐then‐else, switch‐case)
ƒ Iteración:
ƒ Ejecutar un grupo de sentencias mientras exista una condición 
(while, do‐while)
ƒ Ejecutar un grupo de sentencias el número de veces indicado en 
Ej t d t i el número de eces i di d
una condición (for)
ƒ Todas las estructuras de control tienen un único punto de 
entrada y un único punto de salida. 
d ú i d lid
ƒ Las estructuras de control pueden anidarse.

Escuela Técnica Superior de Ingeniería Informática 33
Estructuras de control
PROGRAMACIÓN

ƒ if – then – else


i f ( ex pr es i on) {
. . .
. . .
}
el s e {
. . .
. . .
}

ƒ Llaves
Llaves opcionales si solo hay una instrucción dentro 
opcionales si solo hay una instrucción dentro
del bloque (mejor poner siempre)
ƒ else
l opcional
i l
Escuela Técnica Superior de Ingeniería Informática 34
Estructuras de control
PROGRAMACIÓN

ƒ switch‐case
s wi t c h ( ex pr es i on) {
c as e v al or 1:
. . .
br eak ;
c as e v al or 2:
. . .
br eak ;
. . . .
def aul t :
. . .
}

ƒ Solo evalúa valores discretos.
ƒ default y break opcionales.
Escuela Técnica Superior de Ingeniería Informática 35
Estructuras de control
PROGRAMACIÓN

ƒ while y do‐while
whi l e ( ex pr es i on) {
. . .
}

do {
. . .
} whi l e( ex pr es i on) ;

ƒ Mientras
Mientras la expresión sea distinto de 0 se ejecuta el 
la expresión sea distinto de 0 se ejecuta el
bucle.
ƒ do‐while: el bucle se ejecuta al menos una vez.
d hil l b l j t l
Escuela Técnica Superior de Ingeniería Informática 36
Estructuras de control
PROGRAMACIÓN

ƒ for
f or ( i ni c i al i z ac i ón; c ondi c i ón; ac t ual i z ac i ón) {
. . .
. . .
}

ƒ Inicialización: expresión que da un valor inicial al iterador 
del bucle.
ƒ Condición: expresión de permanencia en el bucle. 
Cuando la condición no se cumple, se sale del bucle.
ƒ Actualización: expresión que modifica el valor del 
A li ió ió difi l l d l
iterador.
ƒ Inicialización, condición y actualización son todas 
Inicialización condición y actualización son todas
opcionales.
Escuela Técnica Superior de Ingeniería Informática 37
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 38
Estructuras de datos
PROGRAMACIÓN

ƒ FForma de organizar un conjunto de datos elementales con el 
d i j t d d t l t l l
objetivo de facilitar su manipulación. Un dato elemental es la 
mínima información que se tiene en un sistema.
ƒ Una
Una estructura de datos define la organización de éstos y un conjunto de 
estructura de datos define la organización de éstos y un conjunto de
operaciones que se pueden realizar sobre ellos. Las operaciones básicas 
son:
ƒ Alta, adicionar un nuevo valor a la estructura.
,
ƒ Baja, borrar un valor de la estructura.
ƒ Búsqueda, encontrar un determinado valor en la estructura para realizar una 
operación con este valor, en forma secuencial o binario (siempre y cuando los 
datos estén ordenados)
datos estén ordenados).
ƒ Cada estructura ofrece ventajas y desventajas en relación a la 
simplicidad y eficiencia para la realización de cada operación. De 
esta forma la elección de la estructura de datos apropiada para
esta forma, la elección de la estructura de datos apropiada para 
cada problema depende de factores como la frecuencia y el orden 
en que se realiza cada operación sobre los datos.

Escuela Técnica Superior de Ingeniería Informática 39
Arrays (Vectores)
PROGRAMACIÓN

ƒ Son variables que contienen una colección 
consecutiva de datos.
ƒ Se declaran entre corchetes, y su tamaño debe ser 
Se declaran entre corchetes, y su tamaño debe ser
fijado en tiempo de compilación.
ƒ Se accede a los elementos también entre corchetes. 
Se accede a los elementos también entre corchetes
Los índices comienzan en 0, y no hay comprobación.
i nt a[ 10] ; / / ar r ay de 10 i nt s
f l oat b[ 2] [ 10] / / ar r ay de 2 di mens i ones
. . .
a[ 0] = 10;
b[ 1] [ 4] = 5. 3;
a[[ 20] = 123;
123 / / es t o no da d er r or de
d c ompii l ac i ón
ó

Escuela Técnica Superior de Ingeniería Informática 40
Arrays o vectores
PROGRAMACIÓN

ƒ Arrays
ƒ Tipos elementales (char, int, float...)
ƒ Tipos derivados (punteros, arrays, estructuras…)
ƒ Los elementos del array son accesibles a través de un 
í di
índice
ƒ valor entero entre 0..N‐1, siendo N el máximo número de 
elementos

vectorEnteros 0 1 2 3 4

25 1 3 4 1
vectorEnteros[0] vectorEnteros[1] vectorEnteros[2] vectorEnteros[3] vectorEnteros[4]

Tema I.5 T. de datos derivados Escuela Técnica Superior de Ingeniería Informática 41


Arrays (Vectores)
PROGRAMACIÓN

ƒ Al declarar un array se le puede dar valores iniciales a 
sus elementos:
i nt a[ 4] = { 13,
13 1,
1 27,
27 1289} ;
i nt b[ ] = { 1, 3, 5, 7, 9} ;
i nt c[ 4] = { 23, 12} ; / / c [ 2] y c [ 3] s i n i ni c i al i z ar
i ntt d[ 2] = { 12,
12 24,
24 91,
91 103} ; / / war nii ng

ƒ Si
Si no se especifica el tamaño, tomará el del número 
no se especifica el tamaño tomará el del número
de elementos inicializados.
ƒ Si se inicializan menos del tamaño, los no 
Si se inicializan menos del tamaño los no
inicializados tendrán basura.
ƒ Si se inicializan más del tamaño, el compilador dará 
Si se inicializan más del tamaño el compilador dará
un aviso.
Escuela Técnica Superior de Ingeniería Informática 42
Punteros
PROGRAMACIÓN

ƒ Concepto de variable
ƒ Región en memoria reservada para almacenar un dato de un 
tipo determinado
tipo determinado
ƒ Posición de memoria inicial
ƒ Tamaño en bytes
y 0xA031
0xA032
65 1 byte
0xA033

0xA034
char letra = ‘A’;
unsigned int entero = 3489;
3489 4 bytes

0xA038

Tema I.5 T. de datos derivados Escuela Técnica Superior de Ingeniería Informática 43


Punteros
PROGRAMACIÓN

ƒ Punteros:
ƒ Variable que representa una posición de memoria que contiene un dato.
ƒ Se declaran anteponiendo un * al nombre de la variable.

tipo * identificador;

float datoReal =123.4; float *float *
pDatoReal = &datoReal;  
pDatoReal;  

0xFE87A1 0 A030
0xA030
0xFE87A2 0xA031

123.4 4 bytes 0xFE87A2


0xF4532 4 bytes

0xFE87A6 0xA035

Tema I.5 T. de datos derivados Escuela Técnica Superior de Ingeniería Informática 44


Punteros
PROGRAMACIÓN

ƒ Operaciones:
ƒ El operador * dereferencia el puntero. Es decir, se accede 
al valor apuntado.
ƒ El operador & devuelve la dirección de memoria donde se 
encuentra una variable. Es decir se obtiene un puntero a la 
variable.
bl

i nt a = 0;
i nt * b;

b = &a; / / b apunt a a l a di r ec c i ón donde es t á a


* b = 127; / / s e guar da 127 en l a di r . apunt ada por b
/ / En es t e punt o l a v ar i abl e a t i ene v al or 127

Escuela Técnica Superior de Ingeniería Informática 45
Punteros
PROGRAMACIÓN

ƒ Operaciones:
ƒ Los punteros se pueden sumar, restar, etc
ƒ Esas operaciones se hacen en múltiplos del tamaño del 
p p
dato apuntado.

i nt * a = . . . . / / a apunt a a al gún l ugar


a = a + 1; / / ahor a apunt a s i z eof ( i nt ) más adel ant e
a = a + 4; / / ahor a apunt a 4* s i z eof ( i nt ) más adel ant e

Escuela Técnica Superior de Ingeniería Informática 46
Punteros – Memoria dinámica
PROGRAMACIÓN

ƒ Cuando se declara una variable de tipo puntero, no 
apunta a ningún sitio “válido”, y no hay memoria 
reservada para esa variable.
ƒ Para manejar memoria de forma dinámica, se utilizan 
las llamadas malloc y free.
las llamadas malloc y free.
ƒ void *malloc(size_t size): devuelve un puntero a una 
zona de memoria de size bytes. Como devuelve un 
zona de memoria de size bytes Como devuelve un
puntero void* hay que convertirlo al tipo de puntero 
que se quiere usar
que se quiere usar.
ƒ void free(void *ptr): libera la zona de memoria 
apuntada por ptr
t d t y obtenida previamente con malloc
bt id i t ll
Escuela Técnica Superior de Ingeniería Informática 47
Punteros – Memoria dinámica
PROGRAMACIÓN

ƒ Ejemplo:
i nt * a, * b; / / punt er os a ent er os

/ / s e r es er v a es pac i o en memor i a par a un ent er o


/ / a apunt a a es e es pac i o de memor i a
a = ( i nt * ) mal l oc ( 1* s i z eof ( i nt ) ) ;

/ / s e r es er v a es pac i o en memor i a par a 16 ent er os


/ / b apunt a a es e es pac i o de memor i a
b = ( i nt * ) mal l oc ( 16* s i z eof ( i nt ) ) ;

/ / s e l i ber a el espac
p i o del pr
p i mer mal l oc
f r ee( a) ;

/ / s e l i ber a el es pac i o del s egundo mal l oc


f r ee( b) ;
Escuela Técnica Superior de Ingeniería Informática 48
Relación entre punteros y arrays
PROGRAMACIÓN

ƒ Los arrays se pueden comportar como punteros, y los punteros como 
arrays.
ƒ Una variable de tipo array es un puntero al primer elemento del array.
ƒ Un puntero al primer elemento de una colección puede usarse como un 
Un puntero al primer elemento de una colección puede usarse como un
array.  int vectorEnteros[]={25,1,3,4,1};

0 A010
0xA010
25 vectoEnteros[0] o *(vectorEnteros)
0xA014
1 ( )
vectoEnteros[1] o *(vectorEnteros+1)
0 A018
0xA018
3 vectoEnteros[2] o *(vectorEnteros+2)
0xA01C
4 [ ] ( )
vectoEnteros[3] o *(vectorEnteros+3)
0 A020
0xA020
1 vectoEnteros[4] o *(vectorEnteros+4)
0xA024

Tema I.5 T. de datos derivados Escuela Técnica Superior de Ingeniería Informática 49


Arrays y punteros
PROGRAMACIÓN

ƒ Diferencias:
ƒ Un array tiene un tamaño asociado, un puntero no:
ƒ Un array es un puntero estático, no se puede cambiar el 
y p , p
lugar al que apunta.

i nt a[ 16] ; / / ar r ay de 16 el ement os
i nt s 1 = s i z eof ( a) ; / / s 1 v al dr á 16* s i z eof ( i nt )

i nt * b = ( i nt * ) mal l oc ( 128* s i z eof ( i nt ) ;


/ / b es un punt
p er o a una c ol ec c i ón de 128 i nt s
i nt s 2 = s i z eof ( b) ; / / s 2 v al dr á 4 u 8, que es el
/ / t amaño de una di r ec c i ón

Escuela Técnica Superior de Ingeniería Informática 50
Strings
PROGRAMACIÓN

ƒ En C no existe un tipo de datos para strings. 
ƒ Se utilizan arrays de char acabados con el caracter 
‘\0’
\0
ƒ Una cadena de caracteres entre comillas dobles es 
un inmediato que representa un string
un inmediato que representa un string.

c har s t r i ng1[ ] = “ Hol a” ;


c har * s t r i ng2 = “ Hol a” ;
c har * s t r i ng3[ ] = { ‘ H
H’ , ‘ o
o’ , ‘ l ’ , ‘ a
a’ , ‘ \ 0
0’ }
/ / Los 3 s t r i ngs s on i gual es

Escuela Técnica Superior de Ingeniería Informática 51
Strings ‐ Funciones
PROGRAMACIÓN

ƒ Algunas funciones de biblioteca para manejo de 
strings:
ƒ strlen: devuelve la longitud del string.
g g
ƒ strcat: concatena dos strings.
ƒ strcpy: copia un string sobre otro.
py p g
ƒ strdup: duplica un string.
ƒ strchr: busca un carácter en el string.
g

Escuela Técnica Superior de Ingeniería Informática 52
Registros
PROGRAMACIÓN

ƒ Son tipos compuestos formados por elementos 
heterogéneos.
ƒ Dentro del registro cada elemento tiene un 
Dentro del registro cada elemento tiene un
identificador y un tipo.

/ / Dec l ar ac i ón del r egi s t r o


s t r uc t Compl ej o {
f l oat r eal ;
f l oat i mag;
};

/ / Dec l ar ac i ón de v ar i abl es del t i po r egi s t r o


s t r uc t Compl ej o unc ompl ej o, ot r oc ompl ej o;

Escuela Técnica Superior de Ingeniería Informática 53
Registros
PROGRAMACIÓN

ƒ Para acceder a los elementos de un registro 
estructura se utiliza el operador punto (.)
unc omp
pl ejj o. r eal = 1. 3;;
unc ompl ej o. i mag = 2. 7;

ƒ Si
Si se trata de un puntero a registro se puede atajar 
t t d t it d t j
con el operador flecha (‐>)

s t r uc t Compl ej o * a =
( s t r uc t Compl
p ejj o * ) mal l oc ( s i z eof ( s t r uc t Comp
pl ejj o) ) ;

a- >r eal = 2. 4; / / l o mi s mo que ( * a) . r eal = 2. 4;


a- >i mag = 3. 14; / / l o mi s mo que ( * a) . i mag = 3. 14;
a

Escuela Técnica Superior de Ingeniería Informática 54
Estructuras de datos avanzadas
PROGRAMACIÓN

ƒ Listas Enlazadas 
Li t E l d
ƒ Listas Simples
ƒ Listas Doblemente Enlazadas
ƒ Listas Circulares
ƒ Colas (FIFO: First In ‐ First Out)
ƒ Pilas (LIFO: Last In ‐ First Out)
ƒ Árboles 
ƒ Árboles Binarios
Á b l Bi i
ƒ Tablas Hash (asocia claves con valores). Funciona 
transformando la clave con una función hash en un hash, ,
un número que la tabla hash utiliza para localizar el valor 
deseado.

Escuela Técnica Superior de Ingeniería Informática 55
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 56
Entrada/Salida
PROGRAMACIÓN

ƒ Definidas en stdio.h
ƒ Funciones disponibles para entrada/salida:
ƒ printf: permite escribir en la pantalla
printf: permite escribir en la pantalla
ƒ getchar/putchar : leer/escribir un caracter.
ƒ scanf : para leer del teclado con formato
scanf : para leer del teclado con formato.
ƒ gets : para leer una línea del teclado (PELIGROSA. Mejor 
usar fgets).
usar fgets).
ƒ puts: para escribir una línea en la pantalla.

Escuela Técnica Superior de Ingeniería Informática 57
printf
PROGRAMACIÓN

i ntt pr i ntt f ( c onstt c har


h * f or matt , . . . ) ;

ƒ *format
format es el string que se imprimirá en pantalla. 
es el string que se imprimirá en pantalla
Admite una serie de caracteres de sustitución que 
serán reemplazados en orden por el resto de
serán reemplazados en orden por el resto de 
argumentos e la función.

c har di a[ ] = “ Domi ngo” ;


i nt hor a = 12;
i nt mi n = 30;

pr i nt f ( “ Hoy es %s y s on l as %d: %d\ n” , di a, hor a, mi n) ;

Escuela Técnica Superior de Ingeniería Informática 58
Entrada/Salida
PROGRAMACIÓN

ƒ Se debe especificar el formato de cada dato a utilizar
[fl
[flags]
] [
[ancho][.precisión]
h ][ i ió ] [l
[longitud]
it d] especificador_formato
ifi d f t

Especificador de formato  Descripción
%c carácter indi id al
carácter individual
%d  %i  entero decimal con signo
%u entero decimal sin signo
g
%o %ou entero octal con y sin signo
%x %X entero hexadecimal con signo
%xu %Xu  entero hexadecimal sin signo
%f %F double con notación decimal‐punto
%
%e %E d bl
double con notación exponencial
ió i l
%g %G double
%p valor de un puntero
valor de un puntero
%s cadena de caracteres
Escuela Técnica Superior de Ingeniería Informática 59
scanf
PROGRAMACIÓN

ƒ Lectura por teclado de los datos de entrada


scanf (cadena_de_control,
_ _ &var1, &var2, …);

ƒ cadena_de_control
ƒ contiene especificadores de formato
ƒ establecen la forma de leer los datos
ƒ son los mismos que los utilizados en printf
ƒ tantos especificadores como datos a leer
i nt l i mi t e;

pr i nt f ( " I nt r oduz c a el l i mi t e s uper i or de l a s er i e: " ) ;


s c anff ( " %d" , &l i mi t e)) ;

Escuela Técnica Superior de Ingeniería Informática 60
Entrada/Salida con ficheros
PROGRAMACIÓN

ƒ Las operaciones de E/S vienen precedidas de la creación 
de un stream o flujo de datos. Un stream nos permite 
establecer una conexión (entre un origen y un destino) a 
través de la cual circula información:
ƒ FILE : es un tipo de datos que representa un fichero abierto
ƒ Funciones y tipos de datos para el manejo de ficheros:
ƒ fopen: abre un fichero.
ƒ fclose: cierra un fichero.
ƒ fread: leer datos de un fichero.
ƒ f i
fwrite: escribir datos a un fichero.
ibi d fi h
ƒ fprintf/fscanf: igual que printf y scanf pero con ficheros en lugar 
de stdout y stdin.
de stdout y stdin
ƒ fputs/fgets: escribe/lee una línea completa de un fichero.
Escuela Técnica Superior de Ingeniería Informática 61
Entrada/Salida con ficheros
PROGRAMACIÓN

ƒ Apertura de un archivo
A d hi
FILE* fopen(const char* nombreArchivo, const char* modo);

Modo Descripción
r Solo lectura
Solo lectura.
w  Trunca el fichero para escritura.
a Escritura al final del fichero.
r+ Lectura y escritura.
w+ Lectura y escritura. Fichero creado si no existe.
a+ Lectura desde comienzo y escritura desde el final. 

ƒ Devuelve un puntero a NULL si no se puede abrir el archivo

Tema I.7 Otros aspectos Escuela Técnica Superior de Ingeniería Informática 62


Entrada/Salida con ficheros
PROGRAMACIÓN

ƒ Cierre de archivos
Ci d hi
int fclose( FILE* pf);

ƒ Importancia de cerrar un fichero
ƒ llos flujos FILE
fl j FILE llevan asociado un buffer intermedio
ll i d b ff i t di
ƒ este buffer sólo se vuelca al fichero cuando esta lleno
ƒ de esta forma se consigue reducir el número de accesos a un 
de esta forma se consigue reducir el número de accesos a un
fichero durante la ejecución de un programa
ƒ sino se cierra un archivo puede que no se guarden los 
últimos cambios hechos
últimos cambios hechos.
ƒ Devuelve un cero si el archivo se cerró con éxito

Tema I.7 Otros aspectos Escuela Técnica Superior de Ingeniería Informática 63


Entrada/Salida con ficheros
PROGRAMACIÓN

ƒ Funciones de E/S de ficheros de texto
ƒ fgetc() / fputc()
int fputc(int c, FILE* pf); int fgetc(FILE* pf);

ƒ fgets() / fputs()
int fputs (const char *cad, FILE *pf);

char* fgets(char* cad, int n, FILE *pf );

ƒ fscanf() / fprintf()
int fprintf (FILE* PF, const char* cadControl,…);

int fscanf(FILE* pf, const char* cadControl, …);
( p )

Tema I.7 Otros aspectos Escuela Técnica Superior de Ingeniería Informática 64


Entrada/Salida con ficheros
PROGRAMACIÓN

ƒ Funciones de E/S de ficheros binarios
ƒ En los ficheros binarios la información se escribe tal cual se 
almacena en memoria
ƒ Optimiza el tamaño ocupada por un archivo
ƒ fread()
f () / fwrite()
f ()
size_t fwrite(const void* ptr, size_t tam, size_t n, FILE* pf);

size_t fread(void* ptr, size_t tam, size_t n, FILE* pf);

Tema I.7 Otros aspectos Escuela Técnica Superior de Ingeniería Informática 65


Otras utilidades
PROGRAMACIÓN

ƒ Control de errores: muchas de las funciones de 
biblioteca y llamadas al sistema proporcionan un 
código de error si no han conseguido realizar su 
propósito.
ƒ La biblioteca estándar proporciona un mecanismo 
La biblioteca estándar proporciona un mecanismo
para controlar estos errores y convertirlos en algo 
“legible”.
legible .
ƒ Por un lado está la variable global errno que es en la 
que dejan las funciones el código de error
que dejan las funciones el código de error.
ƒ La función strerror(int errno) convierte el código de 
error a una cadena de texto más explicativa.
d d t t á li ti
Escuela Técnica Superior de Ingeniería Informática 66
Otras utilidades
PROGRAMACIÓN

ƒ Ejemplo:

#i nc l ude <s t di o. h>


#ii nc l ude
d <er r no. h>
h / / Par a er r no
#i nc l ude <s t r i ng. h> / / Par a s t r er r or

i ntt maii n(( )


{
FI LE * f 1;
f 1 = f open( " . / out . t x t " , " r +"
+ );
i f ( f 1 == NULL)
pr i nt f ( " Er r or al abr i r el f i c her o. \ n%s \ n“ , s t r er r or ( er r no) ) ;
el s e
f pr i nt f ( f 1, ” Hol a mundo\ n" ) ;
}

Escuela Técnica Superior de Ingeniería Informática 67
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 68
Funciones
PROGRAMACIÓN

ƒ Las funciones se pueden “declarar”, para que en el 
resto del código se sepa que existen y como es su 
interfaz (prototipo).
ƒ Las funciones se deben “definir“ en alguna parte, 
implementando su funcionalidad (cuerpo).
implementando su funcionalidad (cuerpo).
/ / Dec l ar ac i ón de l a f unc i ón
i nt medi a( i nt a, i nt b) ;

/ / Def i ni c i ón de l a f unc i ón
i nt medi a( i nt a, i nt b)
{
i nt r es ul t ;
r es ul t = ( a + b) / 2;
r et ur n r es ul t ;
}
Escuela Técnica Superior de Ingeniería Informática 69
Funciones
PROGRAMACIÓN

ƒ Sintaxis:
Argumentos
Nombre
Tipo del valor de 
Ti d l l d
retorno
i nt medi a( i nt a, i nt b)
{
Inicio y fin del 
cuerpo de la  i nt r es ul t ;
función r es ul t = ( a + b) / 2;
r et ur n r es ul t ;
}

Valor de retorno

Escuela Técnica Superior de Ingeniería Informática 70
Funciones ‐ Argumentos
PROGRAMACIÓN

ƒ Los argumentos siempre se pasan por valor.
ƒ Si se quiere pasar un argumento por referencia se 
deben usar punteros.
deben usar punteros.
/ / Ej empl o de pas o de ar gument os por r ef er enc i a
/ / Func i ón
v oii d i nt er c ambi a(( i nt * a, i nt * b) {
i nt aux ;
aux = * a;
*a = *b b;
* b = * aux ;
}

/ / Ll amada a l a f unc i ón
i nt x = 10, y = 20;
. . .
i nt er c ambi a( &x , &y ) ;
Escuela Técnica Superior de Ingeniería Informática 71
Funciones ‐ Recursividad
PROGRAMACIÓN

ƒ U
Una función es recursiva si durante su ejecución 
f ió i id j ió
tiene una llamada a si misma
ƒ Se distingue entre:
S di i
ƒ Recursividad directa
ƒ Recursividad indirecta: varias se llaman unas a otras 
R i id d i di i ll
formando ciclos
ƒ Toda
Toda función recursiva ha de presentar al menos una 
función recursiva ha de presentar al menos una
condición de terminación
ƒ Ejemplos:
ƒ Cálculo del factorial mediante recursividad directa

Escuela Técnica Superior de Ingeniería Informática 72
La función main
PROGRAMACIÓN

ƒ La función main es el punto de entrada del 
programa.
ƒ Puede recibir argumentos que serán los argumentos 
Puede recibir argumentos que serán los argumentos
que se le pasen por línea de comandos a la hora de 
ejecutar el programa.
ejecutar el programa.

i nt mai n( i nt ar gc , c har * ar gv [ ] )

ƒ argc:  es un entero que indica el número de 
argumentos recibido.
ƒ *argv[]: es un puntero a un array de strings. Cada 
entrada del array es uno de los argumentos.
Escuela Técnica Superior de Ingeniería Informática 73
La función main
PROGRAMACIÓN

ƒ Ejemplo:

#i nc l ude <s t di o. h>

i nt mai n( i nt ar gc , c har * ar gv [ ] )
{
pr i nt f ( " Se han r ec i bi do %d ar gument os \ n" , ar gc ) ;
i nt i ;
f or ( i = 0; i < ar gc; i ++))
{
pr i nt f ( " Ar gument o %d = %s \ n" , i , ar gv [ i ] ) ;
}
r et ur n 0;
}

Escuela Técnica Superior de Ingeniería Informática 74
Índice
PROGRAMACIÓN

ƒ Introducción a la programación
ƒ Lenguaje C
ƒ Programación estructurada
Programación estructurada
ƒ Variables
ƒ Operadores
ƒ Estructuras de control
ƒ Estructuras de datos
ƒ Entrada/Salida
ƒ Funciones
ƒ Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 75
Aplicaciones modulares
PROGRAMACIÓN

ƒ La definición de un módulo en C viene dada por:
L d fi i ió d ód l C i d d
ƒ Un archivo de cabecera (.h)
ƒDDefine la interfaz del módulo, es decir, qué ofrece el módulo 
fi l i t f d l ód l d i é f l ód l
definido
ƒ Debería contener: definiciones de tipos y declaraciones de 
p y
funciones (prototipos)
ƒ Un archivo fuente (.c)
ƒ Define los detalles de implementación del módulo
f l d ll d l ó d l ód l
ƒ Inclusión de su correspondiente fichero de cabecera 
( c ude)
(#include)
ƒ Definición de funciones declaradas y no declaradas en el 
fichero de cabecera

Escuela Técnica Superior de Ingeniería Informática 76
Aplicaciones modulares
PROGRAMACIÓN

ƒ La posibilidad de definir módulos en C va permitir:
ƒ Definición de nuevos tipos de datos junto con sus 
operaciones (TADs)
ƒ Colección de valores legales de datos y operaciones 
primitivas que se pueden realizar sobre esos valores
primitivas que se pueden realizar sobre esos valores
ƒ La definición de un TAD implica la definición de:
ƒ Un interfaz público
Un interfaz público
ƒ Representación privada o implementación
ƒ En C no se puede ocultar la representación del TAD
ƒ La creación de bibliotecas de funciones

Escuela Técnica Superior de Ingeniería Informática 77
Librerias
PROGRAMACIÓN

ƒ Librería estática (libnombre.a):  "se copia" en el 
ejecutable cuando lo compilamos. Sólo se copia 
aquella parte de la librería que se necesite. 
ƒ Librería dinámica (libnombre.so): NO se copia en 
nuestro programa al compilarlo. Cuando se ejecuta e 
ejecutable, cada vez que el código necesite algo de la 
librería, irá a buscarlo a ésta. 

Escuela Técnica Superior de Ingeniería Informática 78
Librería estática
PROGRAMACIÓN

ƒ Creación: 
C ió
ƒ Obtener los ficheros objeto (.o) de todos nuestros fuentes (.c). Para 
ello se compilan con gcc ‐c fuente.c ‐o fuente.o. La opción ‐c le dice al 
compilador que no cree un ejecutable, sino sólo un fichero objeto
ƒ Crear la librería (.a). Para ello se usa el comando ar con los siguientes 
parámetros: ar ‐rv libnombre.a fuente1.o fuente2.o ... La opción ‐r le 
p p
dice al comando ar que tiene que insertar (o reemplazar si ya están 
dentro) los ficheros objeto en la librería.
ƒ Compilación:
ƒ cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
L<path2> ... ‐llibreria1 ‐llibreria2 
ƒ Los ‐llibreria
L llib i son para indicar que se debe coger esa librería. El prefijo 
i di d b lib í El fij
lib y la extensión .a ya la pone automáticamente el compilador. Ojo: es 
necesario ponerlas por orden. 

Escuela Técnica Superior de Ingeniería Informática 79
Librería dinámica
PROGRAMACIÓN

ƒ Creación: 
C ió
ƒ Compilar los fuentes, igual que antes, para obtener los objetos.
ƒ Crear la librería con el comando ld. Las opciones para este comando 
Crear la librería con el comando ld. Las opciones para este comando
serían ld ‐o liblibreria.so objeto1.o objeto2.o ... ‐shared. La opción ‐o 
liblibreria.so le indica el nombre que queremos dar a la librería. La 
p q y
opción ‐shared le indica que debe hacer una librería y no un 
ejecutable (opción por defecto). 
ƒ Compilación:
ƒ cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
i i I< th1> I< th2> L< th1>
L<path2> ... ‐Bdynamic ‐llibreria1 ‐llibreria2 
ƒ Definir la variable de entorno LD_LIBRARY_PATH, en la que ponemos 
todos los directorios donde haya librerías dinámicas de interés. 
d l di i d d h lib í di á i d i é
ƒ $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path1>:<path2>:<path3> 
$ export LD_LIBRARY_PATH 

Escuela Técnica Superior de Ingeniería Informática 80
Makefile
PROGRAMACIÓN

ƒ Para
Para simplificar el proceso de compilación lo habitual es hacer un fichero 
simplificar el proceso de compilación lo habitual es hacer un fichero
Makefile en el mismo directorio donde estén los fuentes y utilizar make
para compilarla
ƒ Posible definición de variables: 
Posible definición de variables:
CFLAGS=-I<path1> -I<path2> ...
CC=gcc
ƒ Ordenados en forma de reglas:
objetivo: dependencias
comandos
ƒ Reglas virtuales: sin dependencias 
clean :
rm *.o *~
ƒ Reglas implicitas: 
programa : programa
programa.o
o
programa.o : programa.c
ƒ Reglas patrón: 
%.o : %.c
$(CC) $(CFLAGS) $< -o $@

Escuela Técnica Superior de Ingeniería Informática 81
Makefile
PROGRAMACIÓN

ƒ Creación de librerias:
ƒ Librería estática: 
ƒ CFLAGS=‐I<path1> ‐I<path2> ...
libnombre.a: libnombre.a (objeto1.o ojbeto2.o ...)
ƒ Librería dinámica
Lib í di á i
ƒ liblibreria.so: objeto1.c objeto2.c ...
cc ‐c ‐o objeto1 o objeto1 c
cc ‐c ‐o objeto1.o objeto1.c 
cc ‐c ‐o objeto2.o objeto2.c 
... 
ld ‐o liblibreria.so objeto1.o objeto2.o ... ‐shared 
rm objeto1.o objeto2.o ...

Escuela Técnica Superior de Ingeniería Informática 82

También podría gustarte