Download Lenguajes de Programación - Departamento de Ingeniería de

Document related concepts

Rust (lenguaje de programación) wikipedia , lookup

Haxe wikipedia , lookup

Julia (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Programación funcional wikipedia , lookup

Transcript
C1
INTRODUCCIÓN AL LENGUAJE C
Fundamentos de Informática
Departamento de Ingeniería de Sistemas y Automática. EII.
Universidad de Valladolid
Í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.
4.
Compilación.
Entorno de desarrollo.
5.
Mi primer programa.
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.
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.
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.
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
 Incluye
nombres simbólicos para hacer referencia a las variables o
etiquetas para marcar el destino de los saltos en el flujo del programa.
Ensamblador
Lenguaje de máquina
atras:
00000101
…
…
jmp atras
11010100
 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
Niveles de los lenguajes de programación
•Lenguaje Máquina y Ensamblador
 Son
esencialmente iguales. Hay una correspondencia simple entra 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).
Compiladores e intérpretes
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.
Compiladores e intérpretes
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
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. 19831989. 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.
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 iteracció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.
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)
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 prgramas (.o).
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.
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)
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
Entorno de desarrollo integrado (IDE)
CODE::BLOCKS
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*/
Mi primer programa en C
Todo programa debe tener una función
main, donde comienza la ejecución
del programa
#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*/
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.
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
Mi primer programa en C
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.
#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*/
Mi primer programa en C
Dentro de función main se invoca la función
printf de la librería de E/S estándar.
#include <stdio.h>
main()
{
printf muestra por la salida estándar (la
pantalla normalmente) el contenido de la
cadena de caracteres que se le pasa como
argumento.
/*Cabecera E/S estandar*/
El carácter especial representado por \n
/*Función principal main*/
significa un cambio de línea.
/*Inicio bloque main*/
printf("¡Hola mundo!\n");
}
/*Llamada función main*/
/*Fin bloque main*/
Mi primer programa en C
#include <stdio.h>
main()
Las sentencias en C terminan con el carácter ;
/*Función principal main*/
{
/*Inicio bloque main*/
printf("¡Hola mundo!\n");
}
/*Cabecera E/S estandar*/
/*Llamada función main*/
/*Fin bloque main*/