Lenguaje C
Definición
El lenguaje C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.
Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.
Se trata de un lenguaje débilmente tipificado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.
La primera estandarización del lenguaje C fue en ANSI, con el estándar X3.159-1989. El lenguaje que define este estándar fue conocido vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción de este estándar es muy amplia por lo que, si los programas creados lo siguen, el código es portátil entre plataformas y/o arquitecturas. En la práctica, los programadores suelen usar elementos no-portátiles dependientes del compilador o del sistema operativo.
Características
Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura). Un sistema de tipos que impide operaciones sin sentido.
Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.
Acceso a memoria de bajo nivel mediante el uso de punteros. Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave.
Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.
Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").
El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron tomadas de un lenguaje anterior llamado "B".Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix. Algunas de ellas son:
El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no tenía sistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador. Entonces decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.
La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo. En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativoimplementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961). El C de Kernighan y Ritchie
En 1978, Ritchie y Brian Kernighan publicaron la primera edición de El lenguaje de programación C, también conocido como La biblia de C. Este libro fue durante años la especificación informal del lenguaje. El lenguaje descrito en este libro recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o simplemente "K&R C" (La
segunda edición del libro cubre el estándar ANSI C, descrito más abajo.) Kernighan y Ritchie introdujeron las siguientes características al lenguaje:
• El tipo de datos struct.
• El tipo de datos long int.
• El tipo de datos unsigned int.
• Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambigüedad semántica de expresiones como i=-10, que se podría interpretar bien como i =- 10 o bien como i = -10.
El C de Kernighan y Ritchie es el subconjunto más básico del lenguaje que un compilador debe de soportar. Durante muchos años, incluso tras la introducción del ANSI C, fue considerado "el mínimo común denominador" en el que
los programadores debían programar cuando deseaban que sus programas fueran transportables, pues no todos los compiladores soportaban completamente ANSI, y el código razonablemente bien escrito en K&R C es también código ANSI C válido.
Windows
Code::Blocks: Excelente IDE que usa por defecto MinGW32
Dev-C++: Otro excelente IDE que tambien usa MinGW32
Visual C++ toolit 2003: El excelente compilador de Microsoft.
GCC: Uno de los mejores compiladores multilataforma que existe.
MinGW: El famoso compilador de los mejoes IDEs.
DJGPP: Otro buen compilador para DOS
LCC-w32: Un compilador con un IDE basico.
lcc: Un buen compilador multiplataforma.
Cygwin: Excelente para portar aplicaciones linux a windows.
GNU/Lunix
GCC: La mayoria de las distribuciones GNU/Linux y Unix vienen con este gran compilador incluido.
KDevelop: Este es un completisimo IDE para cualquier lenguaje incluyendo C y C++. Debes configurarlo correctamente para que use el gcc como compilador. Usa KDE.
Anjuta: Otro excelente IDE que en si no tiene nada que envidiarle a KDevelop. Usa Gnome
Eric: IDE que soporta una gran variedad de lenguajes. Igualmente debes configurar para que use gcc.
Code::Blocks: Excelente IDE que usa por defecto MinGW32
Dev-C++: Otro excelente IDE que tambien usa MinGW32
Visual C++ toolit 2003: El excelente compilador de Microsoft.
GCC: Uno de los mejores compiladores multilataforma que existe.
MinGW: El famoso compilador de los mejoes IDEs.
DJGPP: Otro buen compilador para DOS
LCC-w32: Un compilador con un IDE basico.
lcc: Un buen compilador multiplataforma.
Cygwin: Excelente para portar aplicaciones linux a windows.
GNU/Lunix
GCC: La mayoria de las distribuciones GNU/Linux y Unix vienen con este gran compilador incluido.
KDevelop: Este es un completisimo IDE para cualquier lenguaje incluyendo C y C++. Debes configurarlo correctamente para que use el gcc como compilador. Usa KDE.
Anjuta: Otro excelente IDE que en si no tiene nada que envidiarle a KDevelop. Usa Gnome
Eric: IDE que soporta una gran variedad de lenguajes. Igualmente debes configurar para que use gcc.
Otros: En GNU/Linux, Unix y toda su variedad hay una infinidad de editores muy buenos. desde el mas basico como nano hasta vi. Incluso Kate y Kwrite pueden ser considerados excelentes IDEs. Gedit tambien es una buena opcion.
Proceso de Compilación
Creación del programa
Se puede crear un archivo que contenga el programa completo, como en los ejemplos que se tienen más adelante. Se puede usar cualquier editor de textos ordinario con el que se este familiarizado. Un editor disponible en la mayoría de los sistemas UNIX es vi, y en Linux se puede usar pico.
Por convención el nombre del archivo debe terminar con ``.c'' por ejemplo: miprograma.c progprueba.c. El contenido del archivo deberá obedecer la sintaxis de C.
Compilación
Existen muchos compiladores de C. El cc es el compilador estándar de Sun. El compilador GNU de C es gcc, el cual es bastante popular y esta disponible en varias plataformas.
Existen también compiladores equivalentes de C++ los cuales usualmente son nombrados como CC. Por ejemplo, Sun provee CC y GNU GCC. El compilador de GNU es también denotado como g++.
Existen otros compiladores menos comunes de C y C++. En general todos los compiladores mencionados operan esencialmente de la misma forma y comparten muchas opciones comunes en la línea de opciones. Más adelante se listan y se dan ejemplos de opciones comunes de los compiladores. Sin embargo, la mejor referencia de cada compilador es a través de las páginas en línea, del manual del sistema. Por ejemplo: man gcc.
Para compilar el programa usaremos el comando gcc. El comando deberá ser seguido por el nombre del programa en C que se quiere compilar. Un determinado número de opciones del compilador pueden ser indicadas también. Por el momento no haremos uso de estas opciones todavía, se irán comentando algunas más esenciales.
Por lo tanto, el comando básico de compilación es: gcc programa.c donde programa.c es el nombre del archivo.
Si hay errores obvios en el programa (tales como palabras mal escritas, caracteres no tecleados u omisiones de punto y coma), el compilador se detendrá y los reportará.
Podría haber desde luego errores lógicos que el compilador no podrá detectar. En el caso que esta fuera la situación se le estará indicando a la computadora que haga las operaciones incorrectas.
Cuando el compilador ha terminado con éxito, la versión compilada, o el ejecutable, es dejado en un archivo llamado a.out, o si la opción -o es usada con el compilador, el nombre después de -o es el nombre del programa compilado.
Se recomienda y es más conveniente usar la opción -o con el nombre del archivo ejecutable como se muestra a continuación: gcc -o programa c el cual pone el programa compilado en el archivo del programa señalado, en éste caso en programa, en vez del archivo a.out.
Ejecución del programa
El siguiente estado es correr el programa ejecutable. Para correr un ejecutable en UNIX, simplemente se escribe el nombre del archivo que lo contiene, en este caso programa (o a.out).
Con lo anterior, se ejecuta el programa, mostrando algún resultado en la pantalla. En éste estado, podría haber errores en tiempo de ejecución (run-time errors), tales como división por cero, o bien, podrían hacerse evidentes al ver que el programa no produce la salida correcta.
Si lo anterior sucede, entonces se debe regresar a editar el archivo del programa, recompilarlo, y ejecutarlo nuevamente.
Una variable es un espacio reservado en el ordenador para contener valores que pueden cambiar durante la ejecución de un programa. Los tipos determinan cómo se manipulará la información contenida en esas variables. No olvides, si es que ya lo sabías, que la información en el interior de la memoria del ordenador es siempre binaria, al menos a un cierto nivel. El modo en que se interpreta la información almacenada en la memoria de un ordenador es siempre arbitrario, es decir, el mismo valor puede usarse para codificar una letra, un número, una instrucción de programa, etc. El tipo nos dice a nosotros y al compilador cómo debe interpretarse y manipularse la información binaria almacenada en la memoria de un ordenador.
De momento sólo veremos los tipos fundamentales, que son: void, char, int, float y double, en C++ se incluye también el tipo bool. También existen ciertos modificadores, que permiten ajustar ligeramente ciertas propiedades de cada tipo; los modificadores pueden ser: short, long, signed y unsigned o combinaciones de ellos. También veremos en este capítulo los tipos enumerados, enum.
Tipos fundamentales
En C sólo existen cinco tipos fundamentales y los tipos enumerados, C++ añade un séptimo tipo, el bool, y el resto de los tipos son derivados de ellos. Los veremos uno por uno, y veremos cómo les afectan cada uno de los modificadores.
Las definiciones de sintaxis de C++ se escribirán usando el color verde. Los valores entre [] son opcionales, los valores separados con | indican que sólo debe escogerse uno de los valores. Los valores entre <> indican que debe escribirse obligatoriamente un texto que se usará como el concepto que se escribe en su interior.
[signed|unsigned] char <identificador> significa que se puede usar signed o unsigned, o ninguna de las dos, ya que ambas están entre []. Además debe escribirse un texto, que debe ser una única palabra que actuará como identificador o nombre de la variable. Este identificador lo usaremos para referirnos a la variable durante el programa.
· Android es un sistema operativo para dispositivos móviles y ordenadores basado en el núcleo Linux. Los desarrolladores deben escribir código gestionado en lenguaje de programación Java a través de SDK proporcionada por el mismo Google. Una alternativa es el uso de la NDK (Native Development Kit) de Google para hacer el desarrollo en lenguaje C como código fuente.
· Windows esta hecho en C.
C tiene la ventaja de que puede escalarse con assembler, lo cual es buena opcion para optimizar ciertos modulos. Las versiones anteriores de windows estaban hechas en basic (basic NO visual basic) que es un lenguaje de bajo nivel de hace unos cuantos años ya. Es un lenguaje que se usa mucho en la electronica aun. Actualmente windows 7 mac osx leopard y linuxusan mas de una tecnologia ya se empezo a usar c# c++ y hasta java.
· En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).
· Un 97% de los juegos para PC estan hecho con el lenguaje C, como: DOOM, QUAKE II, QUAKE III.
· Tambien se han desarrollado algoritmos sobre graficos e Inteligencia Artificial, manejo de API's graficas como Direct Graphics (Direct 3D o Direct Draw) u OpenGL.
· Compiladores
· Pidgin (anteriormente llamado Gaim) es un cliente de mensajería instantánea multiplataformacapaz de conectarse a múltiples redes (multiprotocolo) y cuentas (multicuenta) de manera simultánea.
· GIMP (GNU Image Manipulation Program) es un programa de edición de imágenes digitales en forma de mapa de bits, tanto dibujos como fotografías. Es un programa libre y gratuito
· GNOME es un entorno de escritorio e infraestructura de desarrollo para sistemas operativos Unix y derivados Unix como GNU/Linux, BSD o Solaris; compuesto enteramente de software libre.
· Vim es una versión mejorada del editor de texto vi, presente en todos los sistemas UNIX.
· Nmap es un programa de código abierto que sirve para efectuar rastreo de puertos escrito originalmente por Gordon Lyon (más conocido por su alias Fyodor Vaskovich). Se usa para evaluar la seguridad de sistemas informáticos, así como para descubrir servicios o servidores en una red informática
· Links es un navegador web de código abierto en modo texto (y gráfico a partir de su versión 2 en modo terminal).
· Blender es un programa informático multiplataforma, dedicado especialmente al modelado, animación y creación de gráficos tridimensionales. Hecho en, casi su totalidad, C.
· OpenSolaris es un sistema operativo libre publicado en 2005 a partir de la versión propietariadel sistema operativo Solaris de Sun Microsystems, ahora parte de Oracle Corporation.
· Entre muchas mas.
Como podemos ver el lenguaje C no tiene limites en lo que a desarrollo de software se refiere.
El uso principal de C es para "la programación del sistema", incluyendo la implementación de sistemas operativos y aplicaciones integradas del sistema, debido a una combinación de características deseables tales como la portabilidad del código y la eficiencia, la capacidad de acceder a direcciones específicas de hardware, la capacidad de "juego de palabras" tipos para que coincida con impuestos desde el exterior requisitos de acceso de datos, y la demanda de tiempo de ejecución bajo en los recursos del sistema. C también se puede utilizar para la programación de página web a través de CGI como una "puerta" para obtener información entre la aplicación Web, el servidor y el navegador. Algunos de los factores para elegir C en lenguajes interpretados son su velocidad, estabilidad y menor susceptibilidad a los cambios en entornos de funcionamiento debido a su naturaleza compilado.
La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo.
Una de las consecuencias de la aceptación de C y la eficiencia es que los compiladores, bibliotecas, y los intérpretes de lenguajes de programación que frecuentemente se han implementado en C.
C es a veces utilizado como un lenguaje intermedio de las implementaciones de otros idiomas. Este enfoque puede ser utilizado para la portabilidad o la conveniencia; mediante el uso de C como un lenguaje intermedio, no es necesario para desarrollar generadores de código específicos de la máquina. Algunos compiladores C que utilizan esta forma se BITC, Gambito, el Glasgow Haskell Compiler, Squeak, y Vala. Sin embargo, C fue diseñado como un lenguaje de programación, no como un idioma de destino del compilador, por lo que es menos que ideal para ser utilizado como un lenguaje intermedio. Esto ha llevado al desarrollo de lenguajes intermedios basados en C como C -.
C también ha sido ampliamente utilizado para implementar aplicaciones de usuario final, sino como aplicaciones se hicieron más grandes, gran parte de que el desarrollo pasó a otros idiomas.
No hay comentarios:
Publicar un comentario