1 / 15

Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información. Sistemas Operativos. Introducción a C. Compiladores. Windows – Visual Studio Linux / Solaris – gcc. Mi primer programa en C. archivo.c #include <stdio.h> int main(void) { int a = 1;

arch
Download Presentation

Universidad Tecnológica Nacional Facultad Regional Buenos Aires

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Sistemas Operativos Introducción a C

  2. Compiladores • Windows – Visual Studio • Linux / Solaris – gcc

  3. Mi primer programa en C 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 # ./archivo La suma de las variables es: 3

  4. Tipos de datos (32bits) • int (4 bytes) • char (1 byte) • puntero a tipo de datos (4 bytes) http://en.wikipedia.org/wiki/C_syntax#Primitive_data_types

  5. Introducción a C • 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.

  6. Makefile – Ejemplo all: make clean make archivo clean: rm archivo archivo: gcc –ggdb archivo.c –o archivo

  7. Makefile – Ejemplo debian:~/charlasC# make make clean make[1]: Entering directory `/root/charlasC' rm archivo make[1]: Leaving directory `/root/charlasC' make archivo make[1]: Entering directory `/root/charlasC' gcc -ggdb archivo.c -o archivo make[1]: Leaving directory `/root/charlasC' debian:~/charlasC# http://es.wikipedia.org/wiki/Make

  8. Punteros Proceso #include <stdio.h> int main(void) { int a = 39; char *b; b = (char*) malloc(128); } 39 a ????? ??????????????? ???????????????? B0CACACA B0CACACA b Stack (asignaciones estáticas) Datos (memoria dinámica) Código (solo lectura)

  9. Operadores & y * #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); } Puntero a un entero ‘c’ y ‘a’ referencian la misma variable

  10. Strings – cadenas #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); }

  11. Streams != Strings Un stream es una secuencia de chars contiguos (vector) char cadena[10]; H o l a Un caso particular de los streams es el String, el cual es finalizado con ‘\0’ char cadena[10]; H o l a \0 Todas las operaciones sobre strings (<string.h>, printf, etc), no debe ser ejecutada sobre streams!

  12. 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

  13. Structs – un ejemplo #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); } 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).

  14. 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

  15. 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 sus extensiones). <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

More Related