Universidad Tecnológica Nacional Facultad Regional Buenos Aires
description
Transcript of Universidad Tecnológica Nacional Facultad Regional Buenos Aires
Universidad Tecnológica Nacional
Facultad Regional Buenos AiresIngeniería en Sistemas de
Información
Introducción a CSistemas Operativos
• Windows – Visual Studio
• Linux / Solaris – gcc
Compiladores
archivo.c
#include <stdio.h>int main(void) {
int a = 1;int b = 2;int c;
c = a + b;printf("La suma de las variables es: %d\n", c);
}
Consola
# gcc archivo.c –o archivo# ./archivoLa suma de las variables es: 3
Mi primer programa en C
• int (4 bytes) • char (1 byte)• puntero a tipo de datos (4 bytes)
http://en.wikipedia.org/wiki/C_syntax#Primitive_data_types
Tipos de datos (32bits)
• Medianamente “tipado”. Toda la memoria se puede castear como otro tipo de datos.
• Todo devuelve un valor por ende todo se puede preguntar. Ej: If (a+b). Si ==0 falso y si !=0 verdadero
• El punto de inicio del programa es la función “main”.
• El código se puede ampliar mediante el uso de bibliotecas.
Introducción a C
all:
make clean
make archivo
clean:
rm archivo
archivo:
gcc –ggdb archivo.c –o archivo
Makefile – Ejemplo
Makefile – Ejemplo
debian:~/charlasC# makemake cleanmake[1]: Entering directory `/root/charlasC'rm archivomake[1]: Leaving directory `/root/charlasC'make archivomake[1]: Entering directory `/root/charlasC'gcc -ggdb archivo.c -o archivomake[1]: Leaving directory `/root/charlasC'
debian:~/charlasC#
http://es.wikipedia.org/wiki/Make
B0CACACA
Punteros
Proceso
Código(solo lectura)
Datos(memoria dinámica)
Stack (asignaciones estáticas)
#include <stdio.h>int main(void) { int a = 39; char *b; b = (char*) malloc(128);}
39a ????????????????????
????????????????
B0CACACA
b
#include <stdio.h>int main(void) {int a = 1;char b = 'L';int *c;c = &a;a = a + 1;printf("La variable 'a' vale: %d y la variable 'c' lo mismo: %d y la variable b: %c\n", a, *c, b);
}
Operadores & y *
Puntero a un entero
‘c’ y ‘a’ referencian la misma variable
#include <stdio.h>#include <stdlib.h>#include <string.h>
int main(void) {
char[20] nombre;char *pnombre;
strcpy (nombre, "Maria");nombre[4] = 'o';Printf ("El valor de nombre es %s y su long: %d\n", nombre, strlen(nombre));
pnombre = (char*)malloc(sizeof(char)*20);
if (!pnombre) {printf("Se asigno la memoria");
} else {printf("La asignación falló");
}free (pnombre);
}
Strings – cadenas
Streams != Strings
H o l a
char cadena[10];
Un stream es una secuencia de chars contiguos (vector)
Un caso particular de los streams es el String, el cual es finalizado con ‘\0’
H o l a \0
char cadena[10];
Todas las operaciones sobre strings (<string.h>, printf, etc), no debe ser ejecutada sobre streams!
Sobre los Strings
• Como todos los vectoresla primer posición es la cero!
• En la reserva de memoria se debe considerar el ‘\0’. (20 pos = 19 char + ‘\0’)
• La ausencia del ‘\0’ al final de una cadena puede generar que se sobreescriban variables del programa y en el mejor de los casos un Segmentation Fault
#include <stdio.h>#include <stdlib.h>#include <string.h>
int main(void) {
struct persona { int legajo; char nombre[20]; char apellido[25] ; char genero; float altura; }; struct persona p; struct persona *q;
strcpy(p.nombre, "Santiago"); strcpy(p.apellido, "Ciciliani"); p.genero = 'M'; p.altura = 1.75;
q = (struct persona*)malloc(sizeof(struct persona)); strcpy(q->nombre, "Peter"); strcpy(q->apellido, "Capusoto"); q->genero = 'F'; q->altura = 1.60;
printf("Los dos nombres son: %s y %s", p.nombre, q->nombre); free(q);
}
Structs – un ejemplo
Puntero a la estructura (4bytes)
Como es un puntero, le tengo que asignar un espacio de memoria a donde apuntar!
Operador “flechita” (->) equivalente a poner:(*q).
Pasar como referencia
void elevarAlCuadrado (int *x);#include <stdio.h>
int main(void) {
int a = 2;
elevarAlCuadrado (&a);
printf("El valor del cuadrado de a es: %d\n", a);}
void elevarAlCuadrado (int *x) { (*x) = (*x) * (*x);}
No paso “a”, sino su dirección
Trabajo con “eso que está apuntado en la dirección x” y no con x que tiene una dirección de memoria
Biblioteca estandar<assert.h> Contiene la macro assert (aserción), utilizada para detectar errores lógicos y otros tipos de
fallos en la depuración de un programa.<complex.h> Conjunto de funciones para manipular números complejos (nuevo en C99).<ctype.h> Contiene funciones para clasificar caracteres según sus tipos o para convertir entre mayúsculas y
minúsculas independientemente del conjunto de caracteres (típicamente ASCII o alguna de susextensiones).
<errno.h> Para testar los códigos de error devueltos por las funciones de biblioteca.<fenv.h> Para controlar entornos en coma flotante (nuevo en C99).<float.h> Contiene la definición de constantes que especifican ciertas propiedades de la biblioteca de coma flotante,
como la diferencia mínima entre dos números en coma flotante (_EPSOLON), el número máximo de dígitos de precisión (_DIG), o el rango de valores que se pueden representar (_MIN, _MAX).
<inttypes.h> Para operaciones de conversión con precisión entre tipos enteros (nuevo en C99).<iso646.h> Para utilizar los conjuntos de caracteres ISO 646 (nuevo en NA1).<limits.h> Contiene la definición de constantes que especifican ciertas propiedades de los tipos enteros, como rango de valores que se
pueden representar (_MIN, _MAX).<locale.h> Para la función setlocale() y las constantes relacionadas. Se utiliza para seleccionar el entorno local apropiado
(configuración regional).<math.h> Contiene las funciones matemáticas comunes.<setjmp.h> Declara las macros setjmp y longjmp para proporcionar saltos de flujo de control de programa no locales.<signal.h> Para controlar algunas situaciones excepcionales como la división por cero.<stdarg.h> posibilita el acceso a una cantidad variable de argumentos pasados a una función.<stdbool.h> Para el tipo booleano (nuevo en C99).<stdint.h> Para definir varios tipos enteros (nuevo en C99).<stddef.h> Para definir varios tipos de macros de utilidad.<stdio.h> Proporciona el núcleo de las capacidades de entrada/salida del lenguaje C (incluye la venerable función printf).<stdlib.h> Para realizar ciertas operaciones como conversión de tipos, generación de números pseudo-aleatorios, gestión de
memoria dinámica, control de procesos, funciones de entorno, de señalización (??), de ordenación y búsqueda.<string.h> Para manipulación de cadenas de caracteres.<tgmath.h> Contiene funcionalidades matemáticas de tipo genérico (type-generic) (nuevo en C99).<time.h> Para tratamiento y conversión entre formatos de fecha y hora.
http://es.wikipedia.org/wiki/Biblioteca_est%C3%A1ndar_de_C