Transparencias de C - docencia de la ETSIT-URJC

Transparencias de C - docencia de la ETSIT-URJC Transparencias de C - docencia de la ETSIT-URJC

docencia.etsit.urjc.es
from docencia.etsit.urjc.es More from this publisher
12.07.2015 Views

IntroTipos de datos básicos y declaracionesOperadoresFuncionesEstructuras de controlPunteros y tipos derivadosVarios ficheros fuenteBibliotecasCurso de Introducción a C sobre GNU/LinuxSSOOEnrique SorianoGrupo de Sistemas y Comunicaciones19 de enero de 2011Grupo de Sistemas y ComunicacionesCurso de Introducción a C sobre GNU/Linux SSOO

IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasCurso <strong>de</strong> Introducción a C sobre GNU/LinuxSSOOEnrique SorianoGrupo <strong>de</strong> Sistemas y Comunicaciones19 <strong>de</strong> enero <strong>de</strong> 2011Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecas(cc) 2008 Grupo <strong>de</strong> Sistemas y Comunicaciones.Algunos <strong>de</strong>rechos reservados. Este trabajo se entrega bajo <strong>la</strong> licencia Creative Commons Attribution-ShareAlike.Para obtener <strong>la</strong> licencia completa, véase http://creativecommons.org/licenses/by-sa/2.1/es. También pue<strong>de</strong>solicitarse a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasCaracterísticasProgramación imperativa estructurada.Re<strong>la</strong>tivamente <strong>de</strong> “bajo nivel”.Lenguaje simple, <strong>la</strong> funcionalidad está en <strong>la</strong>s bibliotecas.Básicamente maneja números, caracteres y direcciones <strong>de</strong>memoria.No tiene tipado fuerte.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasHo<strong>la</strong> mundo: un vistazo rápido.#inclu<strong>de</strong> #inclu<strong>de</strong> /* Comentario */intmain(int argc, char *argv[]){printf("ho<strong>la</strong> mundo");exit(EXIT_SUCCESS);}Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasAntes <strong>de</strong> nada: cómo compi<strong>la</strong>rLa compi<strong>la</strong>ción se compone <strong>de</strong> tres fases. El programa gcc seencarga <strong>de</strong> <strong>la</strong>s tres, en realidad es un front-end que invoca a otrosprogramas:Preprocesado: incluye ficheros <strong>de</strong> cabecera (#inclu<strong>de</strong>s), quitacomentarios, etc.Compi<strong>la</strong>ción (compiling): genera el código objeto a partir <strong>de</strong>lcódigo fuente, pasando por código ensamb<strong>la</strong>dor (aunque nonos <strong>de</strong>mos cuenta).En<strong>la</strong>zado (linking): a partir <strong>de</strong> uno o varios ficheros objeto ybibliotecas, genera un único binario ejecutable.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasAntes <strong>de</strong> nada: cómo compi<strong>la</strong>rPreprocesado y compi<strong>la</strong>ción:gcc -c -Wall -Wshadow -g hello.cEn<strong>la</strong>zado:gcc -o hello hello.oGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasAntes <strong>de</strong> nada: cómo conseguir ayudaLas páginas <strong>de</strong> manual se pue<strong>de</strong>n consultar con el comandoman: man sección asuntoPor ejemplo: man 1 gccSecciones <strong>de</strong> interés: comandos (1), l<strong>la</strong>madas al sistema(2),l<strong>la</strong>madas a biblioteca(3).Para buscar sobre una pa<strong>la</strong>bra: apropos.Por ejemplo: apropos gcc.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasHo<strong>la</strong> mundo: disección.#inclu<strong>de</strong> /* Instrucciones para el preprocesador */#inclu<strong>de</strong> /* Comentario */intmain(int argc, char *argv[])/* Definición <strong>de</strong> función.Punto <strong>de</strong> entrada.*/{ /* Inicio <strong>de</strong> bloque */printf("ho<strong>la</strong> mundo"); /* Sentencia, l<strong>la</strong>mada a función */exit(EXIT_SUCCESS); /* Sentencia, l<strong>la</strong>mada a función */} /* Fin <strong>de</strong> bloque */Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasCosas importantes <strong>de</strong>l ho<strong>la</strong> mundoLos #inclu<strong>de</strong> tienen que seguir un or<strong>de</strong>n, especificado en <strong>la</strong>página <strong>de</strong> manual correspondiente.Los comentarios no pue<strong>de</strong>n estar anidados.Todas <strong>la</strong>s sentencias acaban con un “;”.Un bloque o sentencia compuesta es un grupo <strong>de</strong> sentenciasque se trata sintácticamente como una única sentencia. Losbloques se <strong>de</strong>terminan mediante l<strong>la</strong>ves ({}). Las sentencias <strong>de</strong>una función se engloban en un bloque.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasCosas importantes <strong>de</strong>l ho<strong>la</strong> mundointmain(int argc, char *argv[])/* Definición <strong>de</strong> función.Punto <strong>de</strong> entrada.*/main() es <strong>la</strong> función por <strong>la</strong> que se comienza a ejecutar elprograma, es lo que se <strong>de</strong>nomina “punto <strong>de</strong> entrada”.Recibe dos parámetros, <strong>de</strong>vuelve uno, que es el status <strong>de</strong>lprograma (más a<strong>de</strong><strong>la</strong>nte veremos <strong>la</strong>s funciones).La l<strong>la</strong>mada <strong>de</strong> biblioteca exit() indica si el programa haacabado bien o no. La constante EXIT SUCCESS significa quese ha acabado bien. Po<strong>de</strong>mos usar EXIT FAILURE para indicarlo contrario.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasTipos <strong>de</strong> datos fundamentalesDejamos fuera los tipos reales, nos quedamos con los enteros:Y otro:char : carácter con signo (1 byte), p.e. ’a’ , 12int : entero con signo (4 bytes), p.e. 77 -11unsigned char : carácter sin signo (1 byte), usado paraoperar sobre bits.unsigned int : entero sin signo (4 bytes), p.e. 77void : vacío (ya veremos para qué sirve).Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasDec<strong>la</strong>ración e inicialización <strong>de</strong> variables#inclu<strong>de</strong> #inclu<strong>de</strong> int x = 1; /* variables globales */int k;intmain(int argc, char *argv[]){int i, q=1, u=12; /* variables locales */char c;char p = ’o’;}c = ’z’;i = 13;exit(EXIT_SUCCESS);Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasDec<strong>la</strong>ración e inicializaciónDec<strong>la</strong>ración <strong>de</strong> variables:Las variables globales o externas se <strong>de</strong>c<strong>la</strong>ran fuera <strong>de</strong> cualquierfunción. Se “ven” <strong>de</strong>s<strong>de</strong> cualquier función <strong>de</strong>l fichero, suámbito es todo el fichero. Se localizan en el segmento <strong>de</strong>datos. Si no se inicializan expĺıcitamente, se inicializan a 0.Las variables locales o automáticas se <strong>de</strong>c<strong>la</strong>ran <strong>de</strong>ntro <strong>de</strong> unafunción y sólo se pue<strong>de</strong>n “ver” <strong>de</strong>ntro <strong>de</strong> su ámbito, que es elbloque en el que se han <strong>de</strong>c<strong>la</strong>rado y sus bloques anidados. Selocalizan en <strong>la</strong> pi<strong>la</strong>. Si no se inicializan expĺıcitamente, tienenun valor in<strong>de</strong>terminado.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasDec<strong>la</strong>ración e inicializaciónUna variable <strong>de</strong>c<strong>la</strong>rada <strong>de</strong>ntro <strong>de</strong> una función como staticconserva el valor entre distintas invocaciones. Es así porqueno se localizan en <strong>la</strong> pi<strong>la</strong>, sino en el segmento <strong>de</strong> datos.Unas variables pue<strong>de</strong>n ocultar a otras. Para enterarnos,usamos el modificador -Wshadow <strong>de</strong>l compi<strong>la</strong>dor.Para inicializar, usamos valores constantes o literales:ver sombra.cEntero Decimal: 777Entero Hexa<strong>de</strong>cimal: 0x777Entero Octal: 0777Carácter: ’a’, ’\92’Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasConstantesDec<strong>la</strong>ración <strong>de</strong> constantes enteras mediante el uso <strong>de</strong> tiposenumerados con enum:enum{};Nelementos = 10,Nobjetos = 5,Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasOperadores aritméticos+ Suma. Operandos enteros o reales- Resta. Operandos enteros o reales* Multiplicación. Operandos enteros o reales/ División. Operandos enteros o reales% Módulo. Operandos enterosGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasOperadores lógicosLas operaciones lógicas <strong>de</strong>vuelven un entero. Cualquier valordistinto a 0 significa TRUE, 0 significa FALSE.a && b AND. 1 si “a” y “b” son distintos <strong>de</strong> 0a || b OR. 0 si “a” y “b” son iguales a 0!a NOT. 1 si “a” es 0, 0 si es distinto <strong>de</strong> 0Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasOperadores <strong>de</strong> re<strong>la</strong>cióna < b “a” menor que “b”a > b “a” mayor que “b”a = b “a” mayor o igual que “b”a != b “a” distinto que “b”a == b “a” igual que “b”Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasOperadores <strong>de</strong> asignación++ Incremento (pre o post)-- Decremento (pre o post)= Asignación simple*= Multiplicación y asignación/= División y asignación%= Módulo y asignación+= Suma y asignación-= Resta y asignaciónGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasOperadores bit a bit y otros& (unario) Dirección-<strong>de</strong>. Da <strong>la</strong> dirección <strong>de</strong> su operando* (unario) Indirección. Acceso a un valor, teniendo su dirección~ (unario) Complemento& AND <strong>de</strong> bits^ XOR <strong>de</strong> bits| OR <strong>de</strong> bits> Desp<strong>la</strong>zamiento binario a <strong>la</strong> <strong>de</strong>recha?: Operador ternariosizeof Operador <strong>de</strong> tamañoGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasPrece<strong>de</strong>ncia y asociatividad <strong>de</strong> operadores() [] -> . izquierda a <strong>de</strong>recha! ++ -- * & ˜ sizeof (unarios) <strong>de</strong>recha a izquierda* / % izquierda a <strong>de</strong>recha+ - izquierda a <strong>de</strong>recha> izquierda a <strong>de</strong>recha< >= izquierda a <strong>de</strong>recha== != izquierda a <strong>de</strong>recha& ^ |izquierda a <strong>de</strong>recha&&izquierda a <strong>de</strong>recha|| izquierda a <strong>de</strong>recha?: <strong>de</strong>recha a izquierda= += -= *= /= %= &= . . . <strong>de</strong>recha a izquierda, izquierda a <strong>de</strong>rechaver operadores.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


22POLARIS SOFTWARE LAB LIMITEDANNEXURE TO DIRECTORS’ REPORT FOR THE YEAR ENDED MARCH 31 2003Statement of particu<strong>la</strong>rs of Employees pursuant to Section 217 (2A) of th e Companies Act, 1956 read with the Companies (Particu<strong>la</strong>rs of Employees) Rules, 1975 and forming part of theDirectors report for the year en<strong>de</strong>d March 31 2003. (Continued)Sl. Name Designation Qualification Age Date of Experience Gross Designation - Previous EmploymentNo. Yrs. Joining in Years Remuneration19 Gopa<strong>la</strong>krishnan Packrisamy Software Consultant M.Sc. 31 27-Jan-1999 7 3,322,801 Software Consultant-Info Process20 Govind Singhal Executive Director M.Sc. 42 01-Nov-1996 18 3,241,500 Assistant Vice Presi<strong>de</strong>nt - Systems, Bank of America21 Harpal Duggal* Director-Strategic B.A. (Hons.) 46 10-Apr-2002 22 5,273,115 CEO, Standard Chartered IndiaInitiatives Eco., PGDBM22 Hemant Satyamurthy * Asst. Vice Presi<strong>de</strong>nt B.E., B.B.A. 41 01-May-2002 18 3,265,625 Director, Business Development - Silverline Technologies, Inc.23 Jayachandran Nair Asst. Vice Presi<strong>de</strong>nt B.E., M.B.A. 31 04-Jan-2001 10 3,794,063 Sr Territory Manager - Data Conversion Inc (PatniComputers)24 Jayaraman N* Delivery Head - AIG M.Tech.(Com. Sci.) 49 12-Jun-2002 25 2,004,183 Head - Projects, ESIX Technologies Private Limited.,25 Jeyakumar P S Software Consultant B.Tech. 32 04-Oct-1999 6 2,538,794 Consultant - IQNET Softs26 Ka<strong>la</strong>theeshwaran Associate Consultant M.C.A. 26 09-Oct-2000 4 2,477,879 Software Engineer - Pepsi Foods India Ltd.27 Kaleem Mohammed Software Consultant B.E. 31 09-Aug-1996 9 3,566,851 Software Consultant-Aptech Limited28 Kalyana Krishnan Software Consultant B.E. 36 17-Mar-1997 10 3,386,750 Systems Manager - Corporate Business Systems29 Kandakumar Velusamy Software Consultant D.E.E. 31 15-Mar-2000 7 2,504,325 Programmer - WinTech30 Kedarnath Udiyavar * Senior Vice Presi<strong>de</strong>nt M.M.S. 44 01-Nov-2002 21 1,461,808 Senior Consultant, Citicorp Overseas Software Limited31 Ketan Takkar Asst. Vice Presi<strong>de</strong>nt B.E. 32 26-May-1999 10 3,479,577 Sales Engineer-Kanel Oil Industries32 Kiran Nagesh Asst. Vice Presi<strong>de</strong>nt M.B.A. 30 02-Dec-1996 7 3,380,956 Assistant Manager-Agro Pulping Machinery Limited.33 Kishore Kumar J Software Consultant B.E. 30 22-Jul-2000 6 2,653,209 Programmer - Focus Information Technology34 Konda K Sridharan Software Consultant B.E. 33 08-Oct-1999 9 2,952,885 Systems Analyst-Nucleus Software Group35 Krishnan Srinivasan Senior Vice Presi<strong>de</strong>nt B.Sc., M.B.A. 35 18-Oct-1996 12 5,223,100 Head, Commercial - Shogun Paper Industries Ltd.36 Kumar Narayan Software Consultant B.E.,M.B.A. 29 24-May-1999 8 3,087,500 Consultant - Pentafour Software37 Lakshmi Varadhan* Software Consultant B.E. 28 19-Jun-2000 6 1,103,809 Software Consultant- SSI Ltd38 Mahendra S Negi * Senior Vice Presi<strong>de</strong>nt B.Sc. 47 11-Jan-2002 24 1,646,581 Senior Consultant, Citicorp Overseas Software Limited.39 Manirangan Preetha Software Consultant B.Com., M.C.A. 25 11-Jan-1999 2 2,849,967 Programmer - Ivory Consulting Group40 Manoj Kumar Vice Presi<strong>de</strong>nt M.C.A. 38 07-Jan-1999 15 6,530,823 Asst. Systems Manager - Card Systems Pvt. Ltd.


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasLibrerías estándarLas bibliotecas son colecciones <strong>de</strong> ficheros objeto pre-compi<strong>la</strong>dosque po<strong>de</strong>mos usar. Las bibliotecas con funciones estándar:Entrada y salida estándarprintf(), sprintf(), perror(), . . .Librería estándar <strong>de</strong> Cexit(), atoi(), getenv(), . . .Operaciones con ca<strong>de</strong>nas <strong>de</strong> caracteresstrlen(), strcat(), strcpy(), . . .L<strong>la</strong>madas al sistema <strong>de</strong> UNIXfork(), read(), write(), close(), . . .Control <strong>de</strong> ficherosopen(), creat(), . . .Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecas(Ahora sí) printfint printf(const char * restrict format, ...);Tiene un número variable <strong>de</strong> parámetros.El primer parámetro indica en una ca<strong>de</strong>na <strong>de</strong> caracteres elformato <strong>de</strong> lo que se quiere imprimir por pantal<strong>la</strong>.Cada % en el formato se sustituirá con el parámetro queocupa ese lugar <strong>de</strong>spués <strong>de</strong>l formato.Lo que viene <strong>de</strong>spués <strong>de</strong>l % es <strong>la</strong> forma en <strong>la</strong> que se quiereimprimir el dato: %d es un entero, %c es un carácter, %x unentero hexa<strong>de</strong>cimal sin signo, %o un entero octal sin signo, %suna ca<strong>de</strong>na <strong>de</strong> caracteres o string (<strong>la</strong>s veremos más tar<strong>de</strong>)...más info en man 3 printf.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IfIntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasif ( expresión ) {sentencias1...} else {sentencias2...}Si <strong>la</strong> expresión evalúa a un entero distinto <strong>de</strong> 0, no se entra alif, se entra a else (si lo hay).Los paréntesis son obligatorios.Si sólo hay una sentencia, po<strong>de</strong>mos prescindir <strong>de</strong> <strong>la</strong>s l<strong>la</strong>ves.ver par0.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


SwitchIntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasswitch ( expresión ) {case valor1:sentencias1...case valor2:sentencias2...<strong>de</strong>fault:sentencias3...}El flujo pasa por el case que correspon<strong>de</strong> al valor <strong>de</strong> <strong>la</strong>expresión.La sentencia break rompe un bucle o un switch. Si no serompe al final <strong>de</strong> un case, se entra a otros cases posteriores.Si no entra por ningún case, entrará en <strong>de</strong>fault (si lo hay).ver par1.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


WhileIntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecaswhile ( expresión ) {sentencias...}Se itera hasta que <strong>la</strong> expresión evalúa a 0.La sentencia break rompe un bucle.ver buclewhile.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


ForIntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasfor ( inicialización ; condición ; actualización) {sentencias...}La inicialización sólo se ejecuta una vez antes <strong>de</strong> <strong>la</strong> primeraiteración y antes <strong>de</strong> evaluar <strong>la</strong> condición.Se itera en el bucle hasta que se <strong>de</strong>ja <strong>de</strong> cumplir <strong>la</strong> condición.Al final <strong>de</strong> cada iteración se ejecuta <strong>la</strong> actualización.ver buclefor.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


PunterosIntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasLas variables son una o varias direcciones <strong>de</strong> memoriacontiguas con los bytes correspondientes.Un puntero es una variable que contiene una dirección <strong>de</strong>memoria.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


PunterosIntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasPara <strong>de</strong>c<strong>la</strong>rar una variable puntero a un tipo:tipo<strong>de</strong>dato * nombre;Por ejemplo:int * ptr; /* un puntero a entero */En una sentencia, el operador * (<strong>de</strong>reference) <strong>de</strong><strong>la</strong>nte <strong>de</strong> unavariable <strong>de</strong> tipo puntero significa que queremos operar sobre elcontenido <strong>de</strong> <strong>la</strong> dirección a <strong>la</strong> que apunta.Con el operador & (address of) <strong>de</strong><strong>la</strong>nte <strong>de</strong> una variableobtenemos su dirección <strong>de</strong> memoria.No se pue<strong>de</strong> usar un puntero que no apunta a ningún sitio(NULL)Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasAritmética <strong>de</strong> punterosLos punteros se pue<strong>de</strong>n sumar, restar, etc. P.e. para conseguirel tamaño <strong>de</strong> un buffer.Las operaciones se hacen en múltiplos <strong>de</strong>l tamaño en bytes <strong>de</strong>ltipo <strong>de</strong> datos al que apunta el puntero.char * cptr; /* los char ocupan 1 byte */int * iptr; /* los int ocupan 4 bytes */...cptr = cptr + 4; /* <strong>la</strong> dirección <strong>de</strong> memoria + 4 posiciones */iptr = iptr + 4; /* <strong>la</strong> dirección <strong>de</strong> memoria + (4*4) posiciones */Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasLos Arrays en CEl índice para N elementos va <strong>de</strong> 0 a N-1.No se comprueban los ĺımites.No son más que azúcar sintáctico para los punteros.int lista[N]; → “reserva <strong>la</strong> memoria necesaria para tenerN objetos <strong>de</strong> tipo int y guarda <strong>la</strong> dirección en <strong>la</strong> variablelista”.lista[NUM] = 3; → “escribe el entero 3 en <strong>la</strong> posición <strong>de</strong>memoria (NUM * tamaño <strong>de</strong> int) a partir <strong>de</strong>l punterolista”.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasLos Arrays en CEl operador sizeof sobre un array <strong>de</strong>vuelve el tamaño <strong>de</strong> <strong>la</strong>memoria reservada (NO el número <strong>de</strong> elementos!).Inicialización <strong>de</strong> arrays:int lista1[5] = { 1, 2, 3, 4, 5 }; /* damos el tama~no einicializamos */int lista2[] = { 1, 2, 3, 4, 5 }; /* tama~no == numero elementosen <strong>la</strong> inicialización */int lista3[5] = { 1, 2, 3 }; /* da igual si sobra huecos */int lista2[4] = { 1, 2, 3, 4, 5 }; /* error!!! ATENCION!!! esto compi<strong>la</strong>ver arrays.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasPasando direcciones <strong>de</strong> memoria como argumento#inclu<strong>de</strong> #inclu<strong>de</strong> voiddameletra(char *c){*c = ’A’;}intmain(int argc, char *argv[]){char c = ’b’;}dameletra(&c);printf("c es %c\n", c);exit(EXIT_SUCCESS);ver referencia.c Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasCa<strong>de</strong>nas <strong>de</strong> caracteres (string)Son arrays <strong>de</strong> caracteres acabados en un carácter ’\0’ (elcarácter nulo).Si no se acaba en un nulo, no es una string.Inicializar una string:char str[] = "ho<strong>la</strong>"; /* inicializando una string */char str2[] = {’h’, ’o’, ’l’, ’a’, ’\0’}; /* equivalente a lo anterior */Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasCa<strong>de</strong>nas <strong>de</strong> caracteres (strings)Funciones para manejo <strong>de</strong> ca<strong>de</strong>nas (ver prototipos en <strong>la</strong>s páginas<strong>de</strong> manual):snprintf: simi<strong>la</strong>r a printf, pero imprime en una ca<strong>de</strong>na. Escribecomo mucho el número <strong>de</strong> bytes que se especifica en elsegundo argumento, contando el carácter nulo. Devuelve elnúmero <strong>de</strong> caracteres escritos en <strong>la</strong> ca<strong>de</strong>na.strlen: <strong>de</strong>vuelve el tamaño <strong>de</strong> una ca<strong>de</strong>na, sin contar elcarácter nulo.strcat: concatena dos ca<strong>de</strong>nas, <strong>la</strong> segunda al final <strong>de</strong> <strong>la</strong>primera, <strong>de</strong>jando el resultado en <strong>la</strong> primera. Devuelve unpuntero a <strong>la</strong> ca<strong>de</strong>na resultante. La primera ca<strong>de</strong>na tiene quetener espacio suficiente como para que quepa <strong>la</strong>concatenación.ver strings.c Grupo <strong>de</strong> Sistemas y Comunicaciones Curso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasArgumentos <strong>de</strong> mainargc: variable entera que indica el número <strong>de</strong> argumentos quese le han pasado a main.argv: array <strong>de</strong> strings con cada uno <strong>de</strong> los argumentos. Elprimer argumento se correspon<strong>de</strong> con el nombre <strong>de</strong>l programaque se invoca.ver mainargs.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasEstructurasstruct Coor<strong>de</strong>nada{int x;int y;};struct Coor<strong>de</strong>nada c = {13, 33}; /* inicialización */El tamaño que ocupa en memoria no tiene porqué coincidircon <strong>la</strong> suma <strong>de</strong> los tipos <strong>de</strong> datos que contiene <strong>la</strong> estructura.Sólo se pue<strong>de</strong>n hacer 3 cosas con el<strong>la</strong>s: copiar<strong>la</strong>s/asignar<strong>la</strong>s(esto incluye pasar<strong>la</strong>s como parámetro o retornar<strong>la</strong>), obtenersu dirección (&), y acce<strong>de</strong>r a sus campos.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasEstructurasstruct Coor<strong>de</strong>nada{int x;int y;};type<strong>de</strong>f struct Coor<strong>de</strong>nada Coor<strong>de</strong>nada; /* <strong>de</strong>finición <strong>de</strong> tipo Coor<strong>de</strong>nada */Coor<strong>de</strong>nada c = {13,31}; /* <strong>de</strong>c<strong>la</strong>ración e inicialización */Se suele <strong>de</strong>finir un tipo <strong>de</strong> datos nuevo con type<strong>de</strong>f parausar<strong>la</strong>s <strong>de</strong> forma más cómoda.Si tenemos un puntero a una estructura, el operador -> sirvepara acce<strong>de</strong>r a sus campos:ver structs.cGrupo <strong>de</strong> Sistemas y Comunicacionesp->x ≡ (*p).xCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasMemoria dinámicaFree y malloc (leer <strong>la</strong> página <strong>de</strong> manual):malloc: sirve para pedir memoria en tiempo <strong>de</strong> ejecución. Lamemoria <strong>de</strong>vuelta se localiza en el segmento heap.La memoria reservada con malloc pue<strong>de</strong> tener cualquiercontenido.Si no hay memoria en el sistema, <strong>de</strong>vuelve NULL.free: sirve para liberar <strong>la</strong> memoria <strong>de</strong>vuelta anteriormente pormalloc. No se pue<strong>de</strong> liberar memoria que no se ha solicitadocon malloc.Hay que liberar <strong>la</strong> memoria cuando ya no nos hace falta.ver malloc.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasProgramas con varios ficheros fuenteLas variables globales <strong>de</strong>c<strong>la</strong>ra en un fichero externo tiene que<strong>de</strong>finirse como extern.Una variable tiene que estar <strong>de</strong>c<strong>la</strong>rada en un fichero fuente.Una función o variable global <strong>de</strong>c<strong>la</strong>rada como static no esvisible <strong>de</strong>s<strong>de</strong> otros ficheros. Si no se especifica, sí son visibles.Las variables, tipos <strong>de</strong> datos, constantes, etc. compartidas porlos ficheros fuente <strong>de</strong> un programa <strong>de</strong>berían estar en unfichero <strong>de</strong> cabeceras.Grupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasProgramas con varios ficheros fuenteCada fichero fuente <strong>de</strong>be incluir los ficheros <strong>de</strong> cabeceras quenecesite. No es buena i<strong>de</strong>a incluir ficheros <strong>de</strong> cabecera enotros ficheros <strong>de</strong> cabecera.Para incluir un fichero <strong>de</strong> cabeceras que no está en losdirectorios <strong>de</strong>l sistema (/usr/inclu<strong>de</strong>,...):#inclu<strong>de</strong> "ruta<strong>de</strong>lfichero"(si no lo encuentra, lo busca entre los directorios <strong>de</strong>l sistema)No se <strong>de</strong>ben incluir dos veces un mismo fichero <strong>de</strong> cabecera.ver manyfiles.cGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasBibliotecas estaticas y dinamicasSi varias funciones se usan con frecuencia en multiplesaplicaciones, se pue<strong>de</strong> crear una biblioteca.Creacion <strong>de</strong> biblioteca estatica1 gcc -c cubo.c factorial.c2 ar r libmm.a cubo.o factorial.o3 ranlib libmm.a4 o los dos pasos juntos ar rs libmm.a cubo.o factorial.oCreacion <strong>de</strong> biblioteca compartida1 gcc -c -fPIC cubo.c factorial.c2 gcc -shared -o libmm.so cubo.o factorial.oGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO


IntroTipos <strong>de</strong> datos básicos y <strong>de</strong>c<strong>la</strong>racionesOperadoresFuncionesEstructuras <strong>de</strong> controlPunteros y tipos <strong>de</strong>rivadosVarios ficheros fuenteBibliotecasBibliotecas estaticas y dinamicasUso <strong>de</strong> biblioteca estatica1 mkdir ../inclu<strong>de</strong>2 mkdir ../lib3 mv libmm.h ../inclu<strong>de</strong>4 mv libmm.a ../lib5 gcc -I../inclu<strong>de</strong> -L../lib -o prueba prueba.c -lmmUso <strong>de</strong> biblioteca compartida1 gcc -I../inclu<strong>de</strong> -L../lib -o prueba prueba.c -lmm2 Po<strong>de</strong>mos comprobar con ldd pruebaGrupo <strong>de</strong> Sistemas y ComunicacionesCurso <strong>de</strong> Introducción a C sobre GNU/Linux SSOO

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!