Publicado el 2 de Diciembre del 2018
466 visualizaciones desde el 2 de Diciembre del 2018
422,9 KB
74 paginas
Creado hace 22a (01/12/2001)
Programacin en C
Autor: J. Carlos Lpez Ardao
Diciembre de 2001
˝ndice
1. Introduccin
2. Estructura y fases de creacin de un programa C
3. Generalidades
3.1. Reglas de Æmbito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Palabras clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Constantes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4. Variables en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5. Operadores en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
3.5.1. Operadores aritmØticos
3.5.2. Operadores relacionales
. . . . . . . . . . . . . . . . . . . . . .
3.5.3. Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.4. Operadores a nivel de bit
. . . . . . . . . . . . . . . . . . . . .
4. Directivas del preprocesador
4.1. Denicin de macros . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.
4.3. Compilacin condicional
. . . . . . . . . . . . . . . . . . . . . . . . . .
Inclusin de cheros
5. Tipos de datos en C
5.1. Tipos bÆsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. El tipo direccin (punteros) . . . . . . . . . . . . . . . . . . . . . . .
5.3. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4. Relacin entre punteros y matrices . . . . . . . . . . . . . . . . . . . .
5.4.1. Punteros a punteros. Matrices de punteros . . . . . . . . . . . .
5.5. El modicador const . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6. El tipo void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7. Conversin de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7.1. Conversin de tipos explcita: El cast . . . . . . . . . . . . . . .
6. Estructuras de datos
6.1. Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Uniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3. Enumeraciones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4. Creacin de tipos mediante typedef . . . . . . . . . . . . . . . . . . .
7. Funciones en C
7.1. La funcin main()
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. Reglas de Æmbito de las funciones: Ficheros de cabecera . . . . . . . .
7.3. Ficheros de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4. Libreras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5. Punteros a funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8. Tipos de variables. Reglas de Æmbito
8.1. Variables Locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2. Variables Globales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3. ParÆmetros Formales . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
1
1
3
4
6
6
7
8
8
8
9
9
9
10
11
12
13
13
14
15
16
17
18
19
19
20
21
21
23
24
25
26
27
28
30
31
32
33
33
34
35
9. Control de ujo en C
9.1. Sentencia condicional: if
. . . . . . . . . . . . . . . . . . . . . . . . .
9.2. Sentencia switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3. bucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4. Sentencia do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5. bucles innitos con while y do-while . . . . . . . . . . . . . . . . . .
9.6. Bucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7. Sentencia break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.8. Sentencia continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.Entrada/Salida en C
10.1. E/S por dispositivo estÆndar
. . . . . . . . . . . . . . . . . . . . . . .
10.1.1. Salida formateada: Funcin printf() . . . . . . . . . . . . . .
10.1.2. Entrada formateada: Funcin scanf() . . . . . . . . . . . . . .
10.2. E/S de chero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.Asignacin dinÆmica de memoria
12.Otras funciones de la librera estÆndar
12.1. Manejo de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
12.2. Funciones de caracteres
12.3. Utilidades generales
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4. La librera matemÆtica . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5. Seæales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
12.5.1. Manejo de seæales: Instalacin de un handler
. . . . . . . . . . . . . . . . . .
12.5.2. Posibles problemas con seæales
12.5.3. Generacin de seæales
. . . . . . . . . . . . . . . . . . . . . . .
12.5.4. Temporizadores . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6. Fecha y hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.7. Funciones œtiles en la red . . . . . . . . . . . . . . . . . . . . . . . . .
13.Herramientas œtiles para la programacin en C
13.1. El editor emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2. Compilacin con make . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3. El manual en lnea: man . . . . . . . . . . . . . . . . . . . . . . . . . .
13.4. El depurador: ddd
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.Comandos Unix/Linux mÆs importantes
37
38
38
40
41
41
41
42
43
43
43
44
46
48
50
51
51
54
54
55
56
57
58
59
59
61
62
63
63
65
67
68
68
ii
1.
Introduccin
El lenguaje C se conoce como un lenguaje de medio nivel, pues podramos
situarlo entre los lenguajes de bajo nivel o de mÆquina (ensamblador) y los de
alto nivel como el PASCAL, por ejemplo.
Un lenguaje de medio nivel nos ofrece un conjunto bÆsico de sentencias de
control y de manipulacin de datos que nos permitirÆ construir sentencias y
estructuras de nivel mÆs alto.
En la actualidad existen numerosos compiladores de C, todos ellos con sus
peculiaridades, sin embargo, prÆcticamente todos son compatibles con el C nor-
malizado por ANSI, el ANSI C, en el que nos centraremos partir de ahora.
Entre las caractersticas de C podemos citar:
32 palabras clave (BASIC 128; TPASCAL 48).
Eciencia de ejecucin del cdigo generado (entre los lenguajes de bajo y
alto nivel).
Portabilidad.
No impone tantas restricciones como los lenguajes de alto nivel, dando
mÆs libertad al programador.
C es un lenguaje estructurado como PASCAL, y como tal, un programa en
C cumple todas las caractersticas de la programacin estructurada. De hecho,
en C todo el cdigo se estructura en funciones totalmente independientes entre
s. Incluso el programa principal se incluye en una funcin especial denominada
main().
A pesar de ello, todas las ventajas enumeradas lo convierten en un lenguaje
que requiere mayor experiencia del programador, puesto que los compiladores
detectan muchos menos errores y dan mucha mÆs libertad al programador que
los lenguajes de alto nivel, fundamentalmente en lo que se reere a la construc-
cin y manipulacin de estructuras de datos.
2. Estructura y fases de creacin de un programa
C
Un programa C estÆ formado exclusivamente por funciones independientes.
A diferencia de lenguajes como PASCAL, en C no se puede crear una funcin
dentro de otra funcin.
El cdigo de un programa C suele distribuirse entre varios cheros fuente
(con extensin .c), denominados mdulos. As, habitualmente un programa
de cierto tamaæo constarÆ de un mdulo que contiene el programa principal
(ubicado en una funcin especial denominada main()), y de otros mdulos con
el cdigo de diversas funciones agrupadas segœn algœn criterio, o con deniciones
de tipos utilizados. AdemÆs, todos los compiladores ponen a disposicin del
programador una enorme cantidad de funciones, accesibles por medio de libreras
(ver seccin 7.4). De hecho, si el programa es sucientemente pequeæo puede
constar de un slo mdulo, el principal, que haga uso de las libreras.
En la Figura se muestran las 4 fases en la creacin de un programa ejecutable
desarrollado en el lenguaje C.
1
Codigo
fuente C
original
fichero.c
Preprocesador
cpp (gcc -E -o fichero.i)
Codigo
C puro
fichero.i
Compilador
cc1 (gcc -S)
Codigo fuente
Ensamblador
fichero.s
Ensamblador
as (gcc -c)
Codigo
Objeto
fichero.o
Enlazador
(Linker)
ld (gcc)
Ejecutable
a.out (-o fichero)
Preprocesado: El cdigo C desarrollado es enviado al preprocesador que
interpreta y ejecuta todas las directivas de preprocesado (ver seccin 4).
De esta tarea se encarga el programa cpp, que tambiØn puede ser invocado
con la opcin de parada -E del compilador (indicando adicionalmente -o
fichero.i).
Compilacin: El cdigo C generado por el preprocesador es analizado
sintÆctica, lØxica y semÆnticamente por el compilador. Si el anÆlisis es
correcto, se genera el correspondiente cdigo en lenguaje ensamblador.
Adicionalmente, el compilador suele realizar un importante nœmero de
optimizaciones. Esta tarea es realizada por el programa cc1, que tambiØn
puede ser invocado con la opcin de parada -S del compilador (por defecto
se genera fichero.s, no siendo necesaria la opcin -o).
Ensamblado: El cdigo en ensamblador es transformado en cdigo bi-
nario (objeto), tarea que
Comentarios de: Programación en C (0)
No hay comentarios