el lenguaje c

49
El lenguaje C Introducción

Upload: ayala

Post on 10-Feb-2016

51 views

Category:

Documents


0 download

DESCRIPTION

El lenguaje C. Introducción. Palabras claves. Estructura de un programa. # include // variables externas a usar int main() { printf(“Hello, world."); return 0; }. Directiva al preprocesador. Estructura de un programa. # include < stdio.h > - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: El lenguaje C

El lenguaje C

Introducción

Page 2: El lenguaje C

Palabras clavesauto double int structbreak else long switchcase enum registe

rtypedef

char extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while

Page 3: El lenguaje C

# include <stdio.h>// variables externas a usar int main(){ printf(“Hello, world."); return 0;}

Estructura de un programa

Directiva al preprocesador

Page 4: El lenguaje C

Estructura de un programa#include <stdio.h>int main() {

/* This is a comment ignored by the compiler */

int index; /*con definicion del lugar de almacenamiento sería: int index @0x00c1;*/

index = 13;printf("The value of the index is %d\n", index);index = 27;printf("The value of the index is %d\n", index); return 0;

}

Page 5: El lenguaje C

Estructura de un programa «grande» Uso de archivos cabecera (.h)

por lo general sólo contienen definiciones de tipos de datos, prototipos de funciones y comandos del preprocesador de C

Uso de varios archivos .cpor lo general con un preámbulo consistente de las definiciones de constantes, cabeceras a incluir, definición de tipos de datos, declaración de variables globales y externas (e inicializacion), y una o más funciones

Page 6: El lenguaje C

Estructura de un programa «grande» División en directorios

Por lo general agrupando los archivos relacionados o bajo cierta lógica

Uso de make y makefilePara una fácil y consistente compilación

Uso de macros en maketípicamente usadas para guardar nombres de archivos fuente, nombres de archivos objeto, opciones del compilador o links a bibliotecas

Page 7: El lenguaje C

Tipos de datos char (1 byte) int (2 bytes) float (4 bytes) double (8 bytes) void

short – long – signed - unsigned

Page 8: El lenguaje C

Constantes 2323int 5656L long 78.56 float 89e-2 float 56.9L double 033 octal 0xf1 hexadecimal 0xFUL unsigned long (15 en

decimal)

Page 9: El lenguaje C

Constantes ‘n’ caracter ‘\000’ carácter (representado en

octal) ‘\xhh’ carácter (representado en

hexa)\a alerta \\ barra\b blanco \? Pregunta\f fin de linea \’ Comilla simle\n Nueva linea \” Doble comilla\r Carriage return \v Tab vertical\t Tab horizontal

Page 10: El lenguaje C

Constantes Enumeración: es una lista de valores

enteros constantes. Es una opcion al #define.enum opcion {SI,NO,TALVEZ}; //SI vale 1, NO

vale2, y así sucesivamente.enum dia {LUNES=1,

MARTES=2, ...DOMINGO=‘F’}dia k;k=LUNES;k=3;

Page 11: El lenguaje C

Identificadores

El primer carácter debe ser una letra, después puede haber letras, números o guión bajo.

Es sensible a mayúsculas y minúsculas.

Hasta 31 caracteres.

Page 12: El lenguaje C

Variables Deben declararse antes de utilizarse y

pueden ser: externas: se definen sólo una vez, fuera de

toda función y se declaran extern (implícita o explicitamente) en cada función que las vaya a utilizar, siendo comunes a todas. Son inicializadas a 0 por omisión.

internas (o automáticas): son declaradas dentro de una función y solo existen en ellas. No tienen una inicialización por omisión, quedan indefinidas en su valor inicial si no se las inicializa explícitamente.

Page 13: El lenguaje C

Variables Las variables pueden ser:

estáticas: son visibles sólo dentro del archivo fuente (externas) o función (internas) en donde se declaran. Las estáticas internas mantienen su valor en sucesivos llamados a la función. Son inicializadas a 0 por omisión. Se deben inicializar con un valor o una expresión constante.

register: le indica al compilador que la variable será muy usada. El compilador decidirá si será almacenada en un registro. No poseen inicialización por omisión.

Page 14: El lenguaje C

Calificadores de tipo Sirven para dar características

especiales a los objetos (variables) que están siendo declarados: const: se puede inicializar, pero

después no puede cambiarse el valor volatile: le indica al complilador que

su contenido puede variar mas allá del flujo del programa (no son optimizables)

Page 15: El lenguaje C

Calificador de tipo volatile

int z=8;int main() {

for (int k=1;k<=100;k++){printf("Z vale%d\n", z);

}}

¿Y si Z cambia su valor por factores externos?

Page 16: El lenguaje C

Ejemplos const y volatileconst double e = 2.7182const char msg [] = “warning:”int strlen (const char []);const int hex = 0x80A; /* 2058 en

decimal */const int oct = 012; /* 10 en decimal */volative int k=2;volative unsigned char puerto1

@0x00000002

La comillas dobles definen

una cadena

Page 17: El lenguaje C

Arreglos y Cadenasint digitos [10];int valores[] = {3,4,5,6,7}; // longitud 5

char patron [] = “salida”;es equivalente a:

char patron [] = {‘s’, ‘a’, ‘l’, ‘i’, ‘d’, ‘a’, ‘\0’} // longitud 7

Page 18: El lenguaje C

Operadores aritméticosOperador Nombre definicion

* Multiplicación Multiplica x por y/ Division Divide x por y% Modulo Resto de x dividido y+ Suma Suma x mas y- Susbtracción Resta y de x

++ Incremento ++X X++-- Decremento --X X--- Negación Multiplica x por -1+ Suma unaria

Page 19: El lenguaje C

Acceso a datos y elementos de array

Operador Nombre Ejemplo Definición

[] Elemento de array

X[6] 7mo elemento de x

. Selección de

miembro

PORTD.2 2do bit de PORTD

-> Selección de

miembro

pStruct->x Miembro x de la estructura apuntada

por pStruct* Indirección *p Contenido de la

memoria localizada en la dirección p

& Dirección de

&x Direccion de la variable x

Page 20: El lenguaje C

Operador

Ejemplo Definición

> x > y 1 si x es mayor que y, en caso contrario es 0

>= x >= y 1 si x es mayor o igual a y, en caso contrario es 0

< x < y 1 si x es menor que y, en caso contrario es 0

<= x <= y 1 si x es menor o igual a y, en caso contrario es 0

= = x == y 1 si x es igual que y, en caso contrario es 0

!= x != y 1 si x no es igual que y, en caso contrario es 0

Operadores lógicos

Page 21: El lenguaje C

Operadores lógicos

! !x 1 si x es 0, en caso contrario es 0&& x && y 0 si x o y es 0, en caso contrario 1|| x || y 0 si x e y son 0, en caso contrario

1

Page 22: El lenguaje C

Operadores de bitsOperador Nombre Ejemplo Definición

~ NOT ~x Cambia 1 por 0, y 0 por 1

& AND x&y AND bit a bit de x e y

| OR x|y OR bit a bit de x e y

^ XOR x^y XOR bit a bit de x e y

<< Desp. Izq.

x<<2 Bits de x los desplaza 2pos. a la izquierda

>> Desp. Der.

x>>2 Bits de x los desplaza 2pos. a la derecha

Page 23: El lenguaje C

Sentencias de control while do...while for if ..else break continue switch

Page 24: El lenguaje C

Funciones En general un programa en C son

muchas funciones de pequeño tamaño, y no pocas funciones de gran tamaño.

La comunicación entre las funciones es por los argumentos, valores de retorno y a través de variables externas.

Los argumentos son pasados por valor.

Page 25: El lenguaje C

Estructuras de datos struct: Colección de variables de distinto tipo,

agrupadas bajo un nombre. En memoria puedo almacenar cualquier variable del tipo struct que se defina

struct point{int x;int y;

};....struct point pt = {3,5};printf (“%d, %d”, pt.x, pt.y);

struct { int pulseFrec; unsigned char pulseWdith;} pulser1, pulser2;óstruct pwm{ int pulseFrec; unsigned char pulseWdith;} pulser1, pulser2;

rótulo opcional

Page 26: El lenguaje C

Estructuras Las estructuras se pueden anidar :

struct rect {struct point

p;struct point

z;} ;...struct rect ventana;ventana.p.x =25;

Page 27: El lenguaje C

Estructuras y funciones Las estructuras se puede pasar como argumentos de

funciones.struct point pt = {3,5};struct point *pp;pp = &pt;

pasar la estructura completa (pt):void funcion( struct point w)

pasar un componente de la estructura (pt.x): void funcion( int w)

pasar un puntero a una estructura (pp)void funcion( struct point *w)

Page 28: El lenguaje C

Arreglos de estructurasstruct message {

int emisor;int receptor ;

char datos [50]; }struct message buffer[50];buffer[0].emisor=0;

Page 29: El lenguaje C

Uniones Es semejante a una estructura, pero los

campos que declaramos en una unión ocupan todos la misma posición de memoria.

Solo se puede almacenar un campo por vez. Cuando se define una unión solo se reserva

espacio para almacenar el campo de mayor tamaño.

Permite manejar distintos tipos de datos en una misma área de almacenamiento

El programador es responsable del uso debiendo asignar y recuperar coherentemente.

Page 30: El lenguaje C

Unionesunion ejemplo {

int entero; //16 bitschar caracter; //8 bits

} mi_var; mi_var. entero =0; // solo se puede incializar mediante el primer miembromi_var. caracter =‘A’; //(como el carácter ASCII de A es 65, mi_var.entero vale 65, es decir 000000001000001)mi_var. entero= 65; // pero no es seguro que

mi_var.caracter sea una ‘A’

Page 31: El lenguaje C

Campo de bits Es un conjunto de bits adyacentes, agrupados,

en una palabra. Los bits se manipulan según su tipo declarado

struct {unsigned int ctrl_compresor :1;unsigned int ctrl_cinta :1;unsigned int ctrl_quemador :1;

} control;...control.ctrl_compresor=1; //enciende el compresor

Puede ser cualquier numero de bits

Page 32: El lenguaje C

Creación de tipos de datos La instrucción typedef crea una

definicion de un tipo de datos:typedef int Longitud;

hace que Longitud sea un sinónimo de int. Luego se puede hacer:Longitud k;

lo que declara k del tipo Longitud, con todas sus características.

Page 33: El lenguaje C

Ejemplos de creación de tipos de datos

typedef struct {int coor_x;int coor_y;} Complejo;

crea el tipo Complejo que es análogo a la estructura definida en este caso.

Page 34: El lenguaje C

Ejemplos de creación de tipos de datos

typedef unsigned char byte; //crea el tipo bytetypedef union {

byte Byte;struct {

byte b0 :1; byte b1 :1;byte b2 :1;byte b3 :1;

} Bits;} Control; //crea el tipo Control

luego:Control Z;Z.Byte= 4;Z.Bits.b2=˜Z.Bits.b2;

Page 35: El lenguaje C

Entrada/Salida El C no tiene instrucciones específicas

para I/O. Existen un conjunto de funciones para

I/O desarrolladas y agrupadas en la biblioteca (library) estándar (ANSI): stdio.h

#include <stdio.h> //incluye en el programa todas las funciones de la librería.

Page 36: El lenguaje C

Salida con formato

int printf(“Cadena de control”, variables, operaciones, ...);

printf(“La salida es %6.1f:”,temp);

campo

Page 37: El lenguaje C

Entrada con formato

int scanf(“Cadena de control”, variable, variable, ...);

La variable o variables que se van a introducir tendrán que ir acompañadas delante del nombre por el signo & (son punteros).

Page 38: El lenguaje C

Ejemplo E/S#include <stdio.h>main() {

int edad;char nombre[20];printf(“Introduce nombre: \n“);scanf(“%s”, nombre);printf(“Introduce edad: \n”);scanf(“%d”, &edad);printf(“Tu nombre es %s y tienes %d años. \n”, nombre, edad);

}

debe ser lo suficientemente grande

Page 39: El lenguaje C

Caracteres de control d entero decimal c carácter s tira de caracteres f número de punto flotante con notación

decimal e número de punto flotante con notación

exponencial u entero decimal sin signo o entero octal sin signo x entero hexadecimal sin signo (minúsculas) X entero hexadecimal sin signo (mayúsculas) p puntero

Page 40: El lenguaje C

Funciones para manejar caracteres int getchar(void ): captura

caracteres uno a uno desde la entrada estándar

char variable;variable=getchar();

Page 41: El lenguaje C

Funciones para manejar caracteres int putchar(int): imprime

caracteres uno a uno en la salida estandar y devuelve el carácter escrito o EOF si hubo error.

char variable=‘m’;putchar(variable);

Page 42: El lenguaje C

Proceso de compilación La compilación de un programa C se realiza

en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo: Preprocesado: consistente en modificar el

código en C según una serie de directivas de preprocesador. simplificando de esta forma el trabajo del compilador.

Compilación: que genera el código objeto a partir del código ya preprocesado.

Enlazado: que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final.

Page 43: El lenguaje C

Directivas al preprocesador Facilidad del lenguaje:

Inclusión de archivos include Definición de macros define Operador ## Inclusion condicional # if !

defined ......

Page 44: El lenguaje C

Directivas al preprocesador Inclusión de archivos:

#include “nombrearchivo”o#include <nombrearchivo>

Incluye el contenido del archivo en donde se encuentra el include

El proceso es recursivo

Page 45: El lenguaje C

Directivas al preprocesador

Sustitución de macros:#define nombre texto_de_reemplazo

Reemplza nombre por texto_de_reemplazo en todo el codigo subsiguiente

Puede manejar argumentos La sintaxis debe manejarse con mucho

cuidado

Page 46: El lenguaje C

Directivas al preprocesador

Ejemplo:#define PI 3.1416#define max(A,B) ((A)>(B)?(A):(B))

Si mas adelante en el código en el código dice:x=max(p+g,PI);

Quedará:x=((p+g) > (3.1416) ? (p+g) : (3.1416));

Antes de compilar.

Page 47: El lenguaje C

Directivas al preprocesador

#undef nombre asegura que nombre no será sustituido

## Concatena argumentos reales durante la

sustitucionEjemplo:#define unir(inicio,fin) inicio ## finHace que:

A[unir(zapa,tero)];Pase a ser:

A[zapatero];

Page 48: El lenguaje C

Directivas al preprocesador Inclusión condicional:

#if MICRO == INTEL#define LIBRERIA “intel.h”

#elif MICRO == AMD#define LIBRERÍA “amd.h”

#else#define LIBRERÍA

.../*aquí va la definicion de la librería generica*/...

#endif#include LIBRERIA

Page 49: El lenguaje C

Directivas al preprocesador

#IFDEF, #IFNDEF Son If especializados que testean si un

nombre está definido#ifndef LIBRERÍA#define LIBRERÍA ....#endif