Transcript

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

Entorno de desarrollo integrado (IDE)

CODE::BLOCKS

17

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

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 sentencias en C terminan con el carácter ;

24