01 Introducción al lenguaje C Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales 1
Arquitectura de un computador Procesador (CPU, memoria caché) Buses de datos (son las flechas en el dibujo) Memoria (de corto y largo plazo) Periféricos (entrada, salida)
Sistemas operativos Un sistema operativo es un programa o conjunto de programas que en un sistema informático gestiona los recursos de hardware y provee servicios a los programas de aplicación. Microsoft Windows GNU/Linux (y su hijo Android) Mac OS X ios Unix Solarix FreeBSD BlackBerry OS
Estadísticas a Junio 2013 con respecto al uso de sistemas operativos en los 500 computadores más poderosos del planeta Fuente: http://top500.org/statistics/list/
GNU/Linux
Quiere instalar GNU/Linux? Si está interesado en instalar GNU/Linux, le recomiendo instalar la distribución Linux Mint (con el escritorio KDE): http://www.linuxmint.com/ Se recomienda hacerlo inicialmente dentro de una máquina virtual (si tiene al menos 4 Gb de RAM): https://www.youtube.com/results?search_query=instalar+linux+mint+16+virtualbox De lo contrario instale el sistema operativo desde el Live CD (no hay necesidad de borrar Windows para tal fin): https://www.youtube.com/results?search_query=instalar+linux+mint+16+live+dvd
Bytes
Lenguajes de programación Es un conjunto de instrucciones diseñadas para expresar procesos que pueden ser llevados a cabo por las computadoras: De máquina: procesador unos y ceros que entiende el De bajo nivel (lenguaje ensamblador): es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de la computadora que lo soporta. De nivel intermedio De alto nivel: expresan los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.
Lenguaje de máquina Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un texto en hexadecimal y ASCII.
Lenguaje de bajo nivel Ventajas: Máximo aprovechamiento de los recurso de la máquina. Máxima velocidad posible. Desventajas: Mínima portabilidad (depende de la máquina) Requiere de la máxima atención y de una organización estructurada en base a los planos del hardware y del objetivo del software. Largo tiempo de desarrollo Difícil encontrar errores
Lenguaje ensamblador
Lenguaje de nivel intermedio
Lenguajes de alto nivel Ventajas Genera un código más sencillo y comprensible. Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos. Inconvenientes Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina. Algunos requieren que la máquina cliente posea una determinada plataforma.
Lenguaje de alto nivel Visual Basic for Applications: Alt+F11 en MS EXCEL
Lenguaje C Desarrollado por Dennis Ritchie en AT&T Bell Labs entre 1969 y 1973 Es el lenguaje de programación más utilizado en la actualidad: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Muy rápido, eficiente, fácil Permite el acceso de bajo nivel a la máquina pero permite programación de alto nivel
Dennis Ritchie (1941-2011)
Historia del lenguaje C 1973: invención por Dennis Ritchie 1978: primera especificación (K&R C: Dennis Ritchie and Brian Kernighan) 1989: aparece el ANSI C (standard ANSI C89: el más usado en la actualidad) 1990: ANSI C adoptado por la ISO (standard C90). Nota C89 y C90 son los mismos 1999: standard ISO C99 No está completamente implementado en muchos compiladores 2011: standard ISO C11
The C programming language (1978)
Características del lenguaje C K&R C89 C99 C11 Pocas palabras clave (27+5+5+7) Utilizado para desarrollar sistemas operativos Utilizado para programar desde microcontroladores hasta supercomputadores Lenguaje compilado Lenguaje de nivel medio-bajo Permite el acceso bajo a la memoria del computador
Palabras clave
C vs otros lenguajes (Febrero 2014) FUENTE: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Lenguaje C vs otros lenguajes Es un subconjunto de C++ y de Objective-C Influenció: C#, Java, Perl, PHP, Python http://en.wikipedia.org/wiki/list_of_c-based_programming_languages Carece de: excepciones chequeo de rangos colección de basura (garbage collection) programación orientada a objetos
Por qué C y no MATLAB? Tomado de: http://xkcd.com/409/
Creando código en C Se utiliza cualquier editor de texto Extensión.c para los archivos fuente Extensión.h para los archivos encabezado
Compiladores Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.
Compiladores de lenguaje C GNU compiler collection: gcc (MinGW, Cygwin) Intel C++ compiler Open Watcom (Borland) Turbo C Utilizaremos el gcc en el curso Microsoft Visual C++ (soporta el C99/C11 parcialmente a partir de la versión 2013). Y muchos otros: http://en.wikipedia.org/wiki/category:c_compilers
El compilador MinGW http://mingw.org/ Es una versión nativa para Windows del compilador GNU Compiler Collection (GCC) Este es el compilador que viene por defecto en el Code::Blocks Se debe tener en cuenta que es un compilador de 32 bits Su variante para 64 bits es el MinGW-64, el cual se puede descargar de: http://mingw-w64.sourceforge.net/
Lenguaje interpretado vs Lenguaje compilado Los lenguajes compilados son lenguajes de alto nivel en los que el código fuente se traduce a lenguaje de máquina para una ejecución rápida. Ejemplo: Lenguaje C/C++ Un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una siendo típicamente unas 10 veces más lentos que los programas compilados: Ejemplo: MATLAB, Python, VisualBasic
Entorno de desarrollo integrado (IDE Integrated Development Environment) Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en: un editor de código un compilador un depurador un constructor de interfaz gráfica (GUI)
IDEs para C/C++ Anjuta Code::Blocks (utilizaremos este durante el curso) CodeLite Dev-C++ Eclipse KDevelop NetBeans (si usted tiene un Mac, utilizará este durante el curso) Visual Studio Express wxdev-c++
Anjuta
Dev C++
Code::Blocks
Eclipse
KDevelop
Netbeans
Nuestro primer programa
Compilando y ejecutando... Linux/Mac OS: Windows: En Windows se debe agregar.exe
Estructura de un programa en C Contiene: Encabezados Librerias #include Prototipos de funciones Declaración de constantes y variables globales Función main() Otras funciones
Encabezado Inclusión de librerías Prototipos de funciones Declaración de constantes y variables globales Función main() Definición de las funciones
Comentarios Son ignorados por el compilador Pueden aparecer en cualquier lugar del código Forma de comentario autorizada en el standard C99
La directiva del compilador #include Sirve para cargar textualmente el archivo nombrado en el código actual (generalmente un archivo de encabezado.h) #include <miarchivo> busca ''miarchivo'' en los "include paths" (/usr/include o directiva -L) #include miarchivo busca ''miarchivo'' en el subdirectorio actual Se supone que "miarchivo" contiene constantes, funciones, y otras declaraciones
Subdirectorio actual miarchivo.h programa1.c programa2.c programa1.c GNU/Linux: /usr/include Windows: C:\MinGW\include assert.h complex.h curses.h limits.h locale.h math.h miarchivo.h stdio.h stdlib.h stderr.h thread.h time.h unistd.h programa2.c #include miarchivo.h #include <miarchivo.h> int main(void) {. return 0; } int main(void) {. return 0; }
Observe que ambos archivos están en el mismo subdirectorio
Declaración de variables Las variables se deben declarar antes de usar:
La función main() Es el punto de entrada del programa El standard C permite los siguiente formas de invocar a main():
Bibliografía http://www.slideshare.net/amraldo/introduction-to-c-programming-7898353