C


C es un lenguaje de programación originalmente desarrollado por Dennis M. Ritchie entre 1969 y 1972 en los Laboratorios Bel,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 de tipos de datos estáticos, 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 portable entre plataformas y/o arquitecturas.




Ventajas:

* El lenguaje C ha sido pensado para ser altamente transportable.

* 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 pre procesado, el pre procesador 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.

Gracias a este tipo de programas la tecnología ha podido alcanzar un gran avance en todos los ámbitos tanto nacionales como internacionales, es por eso que es necesario que este tipo de lenguaje se aprenda para poder realizar utilizarías capaces de trabajar y apoyar proyectos que ayudarán al manejo mas sencillo de una empresa ó en particular pequeñas aplicaciones en el hogar.

El Lenguaje C es relativamente sencillo, pero su gran flexibilidad es terreno abonado para la creación de vicios y prácticas no adecuadas de programación, por lo cual debe cuidarse la enseñanza de su estilo de programación, técnica y filosofía de trabajo.



Desventajas:

Al igual que otros lenguajes tiene sus inconvenientes como:

* Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.

* Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un pre procesador que traducía código fuente de C++ a C.

* Encapsulación.

* Funciones anidadas, aunque GCC tiene esta característica como extensión.

* Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación genérica.

* Soporte nativo para programación multihilo y redes de computadores.

* Carece de instrucciones de entrada/salida, de instrucciones para manejo de cadenas de caracteres, con lo que este trabajo queda para la librería de rutinas, con la consiguiente pérdida de transportabilidad. 

La excesiva libertad en la escritura de los programas puede llevar a errores en la programación que, por ser correctos sin tácticamente no se detectan a simple vista. Por otra parte las precedencias de los operadores convierten a veces las expresiones en pequeños rompecabezas. A pesar de todo, C ha demostrado ser un lenguaje extremadamente eficaz y expresivo




Características

Propiedades

*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 pre procesado, el pre procesador 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").

Carencias

*Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.

*Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un pre procesador que traducía código fuente de C++ a C.

*Funciones anidadas, aunque GCC tiene esta característica como extensión.

*Soporte nativo para programación multihilo.

Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. 

Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes.

Típicamente, sólo la programación cuidadosa en lenguaje ensamblador produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia.
En algunos casos, una característica inexistente puede aproximarse.

Por ejemplo, la implementación original de C++ consistía en un pre procesador que traducía código fuente C++ a C.

La mayoría de las funciones orientadas a objetos incluyen un puntero especial, que normalmente recibe el nombre "this", que se refiere al objeto al que pertenece la función. Mediante el paso de este puntero como un argumento de función, esta funcionalidad puede desempeñarse en C. 

Por ejemplo, en C++ se puede escribir:
stack.push(val);
Mientras que en C se podría escribir:
push(stack, val);
Donde el argumento stack es un puntero a una struct equivalente al puntero this de C++, que es un puntero a un objeto.



Requerimientos  software

Instalar el compilador de C

Lo primero que hay que tener claro es que Eclipse sólo es un Entorno Integrado de Desarrollo. Un IDE. Un editor potente, un programa para organizar tus proyectos de software y no pelearte con ficheros sueltos en una carpeta, un sitio donde ver los errores de compilación y leer la ayuda.

Un aglutinador de herramientas. Pero no es un compilador. No lo incluye. E igual que cuando preparas un Eclipse para programar en Java hay que instalar previamente el JDK, que incluye el compilador de Java, aquí hay que instalar el compilador de C.
Buscando uno libre y moderno (el último compilador de C que usé en S.O. Microsoft fue el djgpp sobre MSDOS), di con MinGW, Minimalist GNU for Windows, un conjunto de herramientas GNU (las mismas que se encuentran en GNU/Linux) pero compiladas para Windows. ¡Perfecto!.

Instalando esto ya tengo GCC (el compilador de C en Linux y Mac de toda la vida), make y el resto de herramientas de desarrollo desde la linea de comandos. Instalarlo es descargar el ejecutable y pulsar en Siguiente, Siguiente hasta el final. 

Ojo: instala MinGW en C:\MinGW para evitar problemas posteriores. Es el sitio que aparece por defecto al instalar, así que déjalo como esté.

Tras la instalación, y para que Eclipse pueda encontrarlo, tendremos que añadir la carpeta con los ejecutables de MinGW al PATH del sistema (instrucciones en Inglés, o bien sigues leyendo). 

Para poder usar cualquier programa en Windows tenemos dos opciones: o bien vamos a la carpeta donde está el programa y lo lanzamos desde ahí, o incluímos la carpeta en la variable PATH del sistema de forma que cada vez que se necesite ejecutar ese programa Windows lo encuentre. Vamos a ello. 

Abrimos un explorador de Windows (Tecla Windows + E) y pulsamos con el botón derecho del ratón sobre Equipo.



Si pulsamos en “Configuración Avanzada del Sistema” nos aparecerá la ventana clásica de “Propiedades del Sistema” de XP. Si no está abierta, hacemos click sobre la pestaña “Opciones avanzadas” y veremos un botón abajo del todo que pone “Variables de entorno”.

 Entrando, veremos dos tipos de variables: del Sistema y de nuestro usuarios. Las variables del Sistema tienen efecto para cualquier usuario que inicie sesión en esta máquina, mientras que las del usuario sólo nos afectan a nosotros mismos. 

Cuando añado algo al PATH, me gusta que sea a nivel del Sistema, así que buscamos PATH y doble click. En la ventana que se abre, debemos ir al final de la lista de directorios, añadir un punto y coma y la carpeta donde está MinGW.



Mi PATH queda algo como:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;...;C:\MinGW\bin

La prueba definitiva de que todo está OK es abrir un intérprete de comandos de Windows, pulsando la Tecla Windows + R y escribiendo “cmd” en el diálogo que aparece. Si escribimos gcc -v y nos aparece información sobre nuestra versión instalada del compilador de C GCC, felicidades. Ya podemos compilar.


Requisitos hardware 


Se presupone que los lectores tienen conocimientos elementales de informática a nivel de usuario, y son capaces de instalar un compilador del lenguaje C en sus sistema. Los detalles sobre la instalación se verán en la sección Herramientas.

Con respecto al Hardware, sólo será necesario contar con una PC con sistema operativo, donde sea posible instalar un compilador, y en lo posible un entorno de desarrollo.

 Cuanto mejor sea la computadora, más rápido será el proceso de compilación y ejecución de los programas. Sin embargo, cualquier PC sirve para aprender con los ejemplos de este libro.

Para quienes no tengan conocimientos básicos de programación, puede ser una buena idea comenzar leyendo los primeros capítulos del Wikilibro Fundamentos de programación, ya que algunos temas explicados en ese libro se asumen ya conocidos.

Finalmente, un requisito imprescindible en todo programador es tener sentido común. Muchas veces se pueden adoptar mejores o peores soluciones ante los diversos problemas, y la decisión de cuál elegir pasa por la aplicación del sentido común.

Versiones

En la actualidad son muchos los fabricantes de compiladores C, aunque los más populares entre los fabricantes de software son: 

Microsoft e Imprise.


Una evolución de C, el lenguaje C++ (C con clases) que contiene entre otras, todas  las características de ANSI C. Los compiladores más empleados son Visual C++ de Microsoft, Builder C++ de Imprise (Antigua Borland),  C++ bajo Unix y Linux.


En el verano del 2000, Microsoft patentó una nueva versión de C++, que es C#, una evolución del C++ estándar, con propiedades de Java y diseñado para aplicaciones en línea.





Especificaciones

Lenguaje de programación C. También conocido como “Lenguaje de programación de sistemas” desarrollado en el año 1972 por Dennis Ritchie para UNIX un sistema operativo multiplataforma. 

El lenguaje C es del tipo lenguaje estructurado como son Pascal, Fortran, Basic. Sus instrucciones son muy parecidas a otros lenguajes incluyendo sentencias como if, else, for, do y while... . 

Aunque C es un lenguaje de alto nivel (puesto que es estructurado y posee sentencias y funciones que simplifican su funcionamiento) tenemos la posibilidad de programar a bajo nivel ( como en el Assembler tocando los registros, memoria etc. ).

 Para simplificar el funcionamiento de el lenguaje C tiene incluidas librerías de funciones que pueden ser incluidas haciendo referencia la librería que las incluye, es decir que si queremos usar una función para borrar la pantalla tendremos que incluir en nuestro programa la librería que tiene la función para borrar la pantalla.






No hay comentarios:

Publicar un comentario