Upload
independent
View
2
Download
0
Embed Size (px)
Citation preview
Fundamentos de Informática
Departamento de Ingeniería de Sistemas y Automática. EII.
Universidad de Valladolid
C1 INTRODUCCIÓN AL LENGUAJE C
Índice
1. Lenguajes de Programación
1. Definición.
2. Niveles de lenguajes de programación
3. Compiladores e intérpretes
2. El lenguaje C
1. Historia
2. Características.
3. Compilación.
4. Entorno de desarrollo.
5. Mi primer programa.
2
Lenguajes de Programación: Definición
Un Lenguaje de Programación es un conjunto de
símbolos y reglas con los que expresar órdenes a
un ordenador.
Los símbolos que acepta un lenguaje de
programación representan su léxico.
Las reglas son sintácticas y semánticas:
Sintaxis: establece qué construcciones son aceptables
como instrucciones válidas.
Semántica: establece el significado de dichas
Instrucciones válidas.
3
Lenguajes de Programación: Definición
Lenguaje Natural
(Humano)
Lenguaje de
Programación
Léxico Palabras y signos de
puntuación
Símbolos del lenguaje.
Sintaxis Oraciones correctas. Instrucciones bien
formadas y válidas.
Semántica Información que
trasmite quien habla o
escribe.
Qué acciones debe
ejecutar el ordenador
para hacer lo que ordena
el programa.
4
Niveles de los lenguajes de programación
Básicamente se pueden establecer tres categorías:
Lenguaje máquina
Lenguaje ensamblador
Alto nivel
• Lenguaje máquina Lenguaje directamente comprensible por el procesador.
Representación bit a bit en '1's y '0's.
Depende totalmente del hardware. Es definido por el conjunto de
instrucciones que soporta un procesador.
Ej: Un programa escrito en lenguaje de máquina del 68000 Motorola
es completamente incomprensible por el Pentium Intel.
5
Niveles de los lenguajes de programación
• Lenguaje ensamblador
Emplea palabras nemotécnicas para hacer referencia a las instrucciones del
lenguaje de máquina.
Ensamblador Lenguaje de máquina
ADD AX,54 01000101
01010100
Ensamblador Lenguaje de máquina
atras:
…
jmp atras
00000101
…
11010100
Incluye nombres simbólicos para hacer referencia a las variables o
etiquetas para marcar el destino de los saltos en el flujo del programa.
El programa escrito en lenguaje ensamblador debe ser traducido a lenguaje
de máquina, ya que el procesador sólo entiende 0’s y 1’s.
Programa Fuente en Ensamblador
Programa
Ensamblador
Programa Objeto
1’s y 0’s en
Lenguaje Máquina
6
Niveles de los lenguajes de programación
•Lenguaje Máquina y Ensamblador
Son esencialmente iguales. Hay una correspondencia simple entre ambos y
son considerados lenguajes de Bajo Nivel.
Ambos están directamente ligados a la arquitectura del procesador y del
ordenador que se utilice y requieren una alta especialización del programador.
•Lenguajes de Alto Nivel
Definen su sintaxis y sus estructuras al margen del procesador que se utilicen.
Son independientes del procesador. Son portables (a priori).
Una sola sentencia de alto nivel corresponde en general a muchas
instrucciones de bajo nivel. La correspondencia entre las estructuras de alto
nivel y el código de máquina es compleja.
Las sentencias se escriben en un programa fuente utilizando un editor de
texto (son legibles), en el que pueden aparecer comentarios.
Las instrucciones son más abstractas y potentes.
Necesitan ser traducidos al lenguaje del procesador (compilador).
7
Compiladores e intérpretes
•Lenguajes de Alto Nivel
El compilador
•En la etapa de análisis, el
compilador verifica que los
símbolos son correctos (léxico),
que las sentencias están bien
construidas (sintaxis) y que las
instrucciones tengan un
significado coherente
(semántica).
•En la etapa de síntesis se
genera código de máquina para
el procesador específico y si es
posible se optimiza el código
atendiendo, por ejemplo, a
criterios como:
•Tamaño del programa
•Velocidad de ejecución. 8
Compiladores e intérpretes
•Lenguajes de Alto Nivel
Tras la compilación se genera un fichero con el programa ejecutable. Al ejecutarse puede dar lugar a varios procesos.
El Intérprete
En contraposición a un compilador, un intérprete es un programa que sólo realiza la traducción del programa fuente a medida que sea necesario y, normalmente, no guardan el resultado de dicha traducción.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración.
Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito
•. "
9
Historia del Lenguaje C •Creado por Dennis Ritchie entre el año 1970-73.
•En 1973 la mayor parte del kernel de Unix fue reescrito en C.
•En 1978, Ritchie junto a Brian Kerninghan publicaron The C Programming Language (K&R) donde se hicieron nuevas aportaciones al lenguaje y se estableció el conjunto mínimo de carácterísticas que debía cumplir un compilador de C. Estándar de Facto
•Durante los 70 empezó progresivamente a reemplazar a BASIC en microcomputadoras.
•1980 Stroustroup desarrolla C++ como una extensión orientada a objetos del C.
•El ANSI crea una comisión para estandarizar el lenguaje. 1983-1989. El lenguaje C que cumple con la especificación se le llama ANSI C. Soportado por la mayoría de los compiladores. Incluye el K&R pero con nuevas características. Si se escribe en ANSI C se garantiza la portabilidad.
10
Características del Lenguaje C •Lenguaje de alto nivel con posibilidad de bajo nivel. Independiente del
hardware aunque si el programador quiere puede "bajar" al hardware.
•El núcleo del lenguaje es relativamente pequeño. Se apoya en
bibliotecas o librerías externas para realizar funciones esenciales (como
la entrada /salida). Dado que las librerías están también estandarizadas
(ANSI) se puede considerar que forman parte del lenguaje.
•El paradigma de programación que mejor se aviene al lenguaje C es el de
Programación Estructurada:
•Escritura de programas mediante módulos que necesitan sólo tres
estructuras: secuencia, selección e iteración (sin necesidad de saltos
incondicionales de tipo goto, exit o múltiples return)
•El flujo del programa en C está definido por secuencia, decisiones
condicionales, bucles y llamadas a funciones.
•Conjunto de operadores aritmético-lógicos muy poderoso. Cuidado, porque
puede fácilmente crear programas casi imposibles de entender o crípticos.
•Valores almacenados en variables, con diferentes tipos.
•Los programas grandes se subdividen en funciones: procedimientos con
parámetros de entrada y de salida bien definidos.
11
Compilación •El Programa Fuente es un fichero texto que
contiene las instrucciones y comentarios escritos
por el programador.
•Puede incluir sentencias del tipo:
# include <stdio.h>
Indica que se incluya un archivo de cabecera.(.h) .Estos archivos contienen
definiciones y declaraciones útiles y utilizadas
por las librerías.
•Antes de compilar se crea otro programa fuente
mediante un preprocesamiento:
•incluyendo los archivos de cabecera
•quita comentarios
•reemplaza definiciones (#define PI
3.14)
•se obtiene programa fuente intermedio
(texto) extendido (.i)
12
Compilación
El programa fuente intermedio es compilado y se obtiene un programa objeto en código de máquina del procesador (.o).
Este programa objeto todavía no es directamente ejecutable, dado que falta por integrar el código ejecutable de las Librerías (.a) o de otros programas (.o).
13
Compilación
El enlazador (Linker) une todos los archivos
que contengan código objeto para el
programa, así como las librerías a las que
éstos hacen referencia.
Se resuelven las referencias cruzadas entre
las distintas partes del código.
Ejemplo:
•Una instrucción en objeto1.o puede hacer
referencia a una variable en objeto2.o
•En objeto1.o y objeto2.o se invocan
funciones de la librería estándar.
Como resultado se obtiene el programa
directamente ejecutable por el S.O.
14
Entorno de desarrollo integrado (IDE)
Un entorno de desarrollo integrado , (IDE: integrated development environment), es un programa informático compuesto por un conjunto de herramientas para facilitar las tareas de programación.
Normalmente constan de:
• un editor de textos donde escribimos el código
• un compilador, que generará el código ejecutable
• un depurador, que nos permite buscar errores
• herramientas para elaborar interfaces gráficas (GUI: graphical user interface)
15
Entorno de desarrollo integrado (IDE)
CODE::BLOCKS
• Es un IDE de uso libre y multiplataforma para el desarrollo de programas en C y C++.
• Permite el uso de diferentes compiladores. En nuestro caso usaremos el compilador gcc en su versión para Windows MinGW
• Dispone de multitud de posibilidades de configuración en lo que respecta a las características del editor, opciones de compilación, depuración, etc. • Durante el curso, nosotros nos centraremos sólo en los
aspectos relacionados con la programación en C
• Más información en:
• http://www.codeblocks.org/
• http://es.wikipedia.org/wiki/Code::Blocks 16
Mi primer programa en C
#include <stdio.h> /*Cabecera E/S estandar*/
main() /*Función principal main*/
{ /*Inicio bloque main*/
printf("¡Hola mundo!\n"); /*Llamada función main*/
} /*Fin bloque main*/
18
Mi primer programa en C
#include <stdio.h> /*Cabecera E/S estandar*/
main() /*Función principal main*/
{ /*Inicio bloque main*/
printf("¡Hola mundo!\n"); /*Llamada función main*/
} /*Fin bloque main*/
Todo programa debe tener una función main, donde comienza la ejecución
del programa
19
Mi primer programa en C
#include <stdio.h> /*Cabecera E/S estandar*/
main() /*Función principal main*/
{ /*Inicio bloque main*/
printf("¡Hola mundo!\n"); /*Llamada función main*/
} /*Fin bloque main*/
Las llaves {} delimitan las sentencias
incluidas en el bloque de definición de la función main.
20
Mi primer programa en C
#include <stdio.h> /*Cabecera E/S estandar*/
main() /*Función principal main*/
{ /*Inicio bloque main*/
printf("¡Hola mundo!\n"); /*Llamada función main*/
} /*Fin bloque main*/
Comentarios aclaratorios delimitados por /* */. Son ignorados por el compilador y
eliminados en la etapa de preprocesamiento 21
Mi primer programa en C
#include <stdio.h> /*Cabecera E/S estandar*/
main() /*Función principal main*/
{ /*Inicio bloque main*/
printf("¡Hola mundo!\n"); /*Llamada función main*/
} /*Fin bloque main*/
Se ordena la inclusión (durante el etapa de
preprocesamiento) del archivo de cabecera
de E/S estándar. Es necesario porque se va
a utilizar una función de E/S.
22
Mi primer programa en C
#include <stdio.h> /*Cabecera E/S estandar*/
main() /*Función principal main*/
{ /*Inicio bloque main*/
printf("¡Hola mundo!\n"); /*Llamada función main*/
} /*Fin bloque main*/
Dentro de función main se invoca la función
printf de la librería de E/S estándar.
printf muestra por la salida estándar (la
pantalla normalmente) el contenido de la
cadena de caracteres que se le pasa como
argumento.
El carácter especial representado por \n
significa un cambio de línea.
23