SlideShare uma empresa Scribd logo
1 de 20
INSTITUTO TECNOLOGICO SUPERIOR PARTICULAR
SAN GABRIEL
ARTICULO:
C++
ING: ANGEL HUILCA
MATERIA:
ESTRUCTURAS DE DATOS
NOMBRE: PAUL VARGAS
RIOBAMBA – ECUADOR
2013-1014
C (lenguaje de programación)
C
Desarrollador(es)
Dennis Ritchie y Bell Labs
Información general
Paradigma Imperativo (Procedural),Estructurado
Apareció en 1972
Diseñado por Dennis M. Ritchie
Última versión
estable
C11 (diciembre de 2011)
Tipo de dato Débil, Estático
Implementaciones Múltiples
Dialectos Cyclone, Unified Parallel C, Split-C, Cilk, C*
Influido por B (BCPL,CPL), ALGOL
68,
1
Ensamblador, PL/I,Fortran
Ha influido a Vala, C#, Objective-
C,C++, AWK, bc, Java, php,NXC, D
Sistema operativo Multiplataforma
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 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 portátil entre plataformas y/o arquitecturas.
FILOSOFÍA
Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas
pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje,
sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible
escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre
diferentes lenguajes.
En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto
de características, se pueden desarrollar compiladores de C fácilmente. En
consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas
(más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel,
el lenguaje se desarrolló para incentivar la programación independiente de la
máquina. Un programa escrito cumpliendo los estándares e intentando que sea
portátil puede compilarse en muchos computadores.
C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el
que ha estado asociado mucho tiempo) por programadores para programadores. Sin
embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy
alejados de la programación de software de sistema, para la que se diseñó
originalmente.
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 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").
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 preprocesador 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 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 preprocesador 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:
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
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.
HISTORIA
DESARROLLO INICIAL
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 SpaceTravel. 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 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).
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 longint.
El tipo de datos unsignedint.
Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la
ambigüedad sintáctica de expresiones como i=-10, que se podría interpretar
bien como i =- 10 o bien comoi = -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.
En las primeras versiones del lenguaje, la definición de funciones se hacía
mediante un 'prototipo de función' (functionprototype), el cual indicaba al
compilador el tipo de retorno de la función. Aunque este método tiene una gran
desventaja respecto al nuevo, debido a que no comprueba el número ni el tipo
en la lista de argumentos; en otras palabras, es mucho más fácil cometer
errores al hacer una llamada a una función con argumentos incorrectos.
Ejemplo del "viejo estilo":
intpower();/* Podria haberse omitido (*) */
power()
int a, b;
{
int n;
for(n =1; b >0;--b)
n*= a;
return n;
}
Ejemplo de la nueva definición:
int power(int a,int b)
{
int n;
for(n =1; b >0;--b)
n*= a;
return n;
}
(*) Por defecto, el tipo de retorno en C es int, por lo que la declaración
entera intpower(); podría haberse omitido.
En los años siguientes a la publicación del C de Kernighan y Ritchie, se
añadieron al lenguaje muchas características no oficiales, que estaba
soportadas por los compiladores de AT&T, entre otros. Algunas de estas
características eran:
Funciones void y el tipo de datos void *.
Funciones que retornaban tipos de datos struct o union (en lugar de
punteros).
Asignación de tipos de datos struct.
Calificador const, que hace que un objeto sea de sólo lectura.
Una biblioteca estándar, que incorporaba la mayoría de las funcionalidades
implementadas por varios desarrolladores de compiladores.
Enumeraciones.
ANSI C e ISO C
A finales de la década de 1970, C empezó a sustituir a BASIC como lenguaje
de programación de microcomputadores predominante. Durante la década de
1980 se empezó a usar en los IBM PC, lo que incrementó su popularidad
significativamente. Al mismo tiempo, BjarneStroustrup empezó a trabajar con
algunos compañeros de Bell Labs para añadir funcionalidades de programación
orientada a objetos a C. El lenguaje que crearon, llamado C++, es hoy en día el
lenguaje de programación de aplicaciones más común en el sistema
operativo Microsoft Windows; mientras queC sigue siendo más popular en el
entorno Unix. Otro lenguaje que se desarrolló en esa época, Objective C,
también añadió características de programación orientada a objetos a C.
Aunque hoy en día no es tan popular como C++, se usa para desarrollar
aplicaciones Cocoa para Mac OS X.
En 1983, el Instituto Nacional Estadounidense de Estándares organizó un comité,
X3j11, para establecer una especificación estándar de C. Tras un proceso largo
y arduo, se completó el estándar en 1989 y se ratificó como el "Lenguaje de
Programación C" ANSI X3.159-1989. Esta versión del lenguaje se conoce a
menudo como ANSI C, o a veces como C89 (para distinguirla de C99).
En 1990, el estándar ANSI (con algunas modificaciones menores) fue adoptado
por la Organización Internacional para la Estandarización (ISO) en el estándar
ISO/IEC 9899:1990. Esta versión se conoce a veces como C90. No obstante,
"C89" y "C90" se refieren en esencia al mismo lenguaje.
Uno de los objetivos del proceso de estandarización del ANSI C fue producir
una extensión al C de Kernighan y Ritchie, incorporando muchas
funcionalidades no oficiales. Sin embargo, el comité de estandarización incluyó
también muchas funcionalidades nuevas, como prototipos de función, y un
preprocesador mejorado. También se cambió la sintaxis de la declaración de
parámetros para hacerla semejante a la empleada habitualmente en C++:
main(argc,argv)
intargc;
char**argv;
{
...
}
pasó a ser
int main(intargc,char*argv[])
{
...
}
ANSI C está soportado hoy en día por casi la totalidad de los compiladores. La
mayoría del código C que se escribe actualmente está basado en ANSI C.
Cualquier programa escrito sólo en C estándar sin código que dependa de un
hardware determinado funciona correctamente en cualquier plataforma que
disponga de una implementación de C compatible. Sin embargo, muchos
programas han sido escritos de forma que sólo pueden compilarse en una
cierta plataforma, o con un compilador concreto, esto puede ser debido a
diversos motivos:
La utilización de bibliotecas no estándar, como interfaces gráficas de usuario.
El uso de compiladores que no cumplen las especificaciones del estándar.
El uso de tipos de datos suponiendo que tendrán el mismo tamaño u orden de
los bits en todas las plataformas.
La macro __STDC__ puede usarse para dividir el código en secciones ANSI y
K&R para el compilador.
# if __STDC__
externintgetopt(int,char*const*,constchar*);
# else
externintgetopt();
# endif
Algunos programadores recomiendan usar "#if __STDC__", como en el
ejemplo, en lugar de "#ifdef __STDC__" porque algunos compiladores le
asignan el valor cero a __STDC__ para indicar que no son compatibles con
ANSI.
En el siguiente ejemplo, el programa pide al usuario que introduzca un número.
El programa dividirá dicho número entre 2 e imprimirá el resultado mientras que
este sea par, y terminará cuando el número sea impar:
#include <stdio.h>
intnumero;
intmain(void)
{
printf("Introduzca un número entero: ");
scanf("%d",&numero);
while(numero%2==0)
{
printf("%d/2 = %dn", numero, numero/2);
numero/=2;
}
printf("%d no es entero, saliendo...n", numero);
return0;
}
C99
Tras el proceso de estandarización de ANSI, la especificación del lenguaje C
permaneció relativamente estable durante algún tiempo, mientras
que C++ siguió evolucionando. Sin embargo, el estándar continuó bajo revisión
a finales de la década de 1990, lo que llevó a la publicación del estándar ISO
9899:1999 en 1999. Este estándar se denomina habitualmente "C99". Se
adoptó como estándar ANSI en marzo de 2000.
Las nuevas características de C99 incluyen:
Funciones inline.
Las variables pueden declararse en cualquier sitio (como en C++), en lugar
de poder declararse sólo tras otra declaración o al comienzo de una
declaración compuesta.
Muchos tipos de datos, incluyendo longlongint (para reducir el engorro de la
transición de 32 bits a 64 bits), un tipo de datos booleano, y un
tipo complex que representa números complejos.
Arrays de longitud variable.
Soporte para comentarios de una línea que empiecen con //, como
en BCPL o en C++, característica para la que muchos compiladores habían
dado soporte por su cuenta.
muchas funciones nuevas, como snprintf()
algunos headers nuevos, como stdint.h.
Una consideración importante es que hasta la publicación de este estándar, C
había sido mayormente un subconjunto estricto del C++. Era muy sencillo
"actualizar" un programa de C hacia C++ y mantener ese código compilable en
ambos lenguajes. Sin embargo, el nuevo estándar agrega algunas
características que C++ no admite, como por ejemplo los inicializadores
estáticos de estructuras. También define al tipo "bool" de una manera que no
es exactamente la del C++.
El compilador GCC, entre muchos otros, soportan hoy en día la mayoría de las
nuevas características de C99. Sin embargo, este nuevo estándar ha tenido
poca acogida entre algunos desarrolladores de compiladores,
como Microsoft y Borland, que se han centrado en C++. Brandon Bray, de
Microsoft, dijo a este respecto:
"En general, hemos visto poca demanda de muchas características de C99.
Algunas características tienen más demanda que otras, y consideraremos
incluirlas en versiones futuras siempre que sean compatibles con C++."2
C11
C11 (antes conocido como C1X) es un nombre informal para ISO/IEC
9899:2011,3 el último estándar publicado para C. El borrador final, N1570,4 fue
publicado en abril de 2011. El nuevo estándar superó su última revisión el 10
de octubre de 2011 y fue oficialmente ratificado por la ISO y publicado el 8 de
diciembre de 2011.
VENTAJAS
Lenguaje muy eficiente puesto que es posible utilizar sus características de
bajo nivel para realizar implementaciones óptimas.
A pesar de su bajo nivel es el lenguaje más portado en existencia,
habiendo compiladores para casi todos los sistemas conocidos.
Proporciona facilidades para realizar programas modulares y/o utilizar
código o bibliotecas existentes.
INCONVENIENTES
El mayor problema que presenta el lenguaje C frente a los lenguajes de tipo de
dato dinámico es la gran diferencia en velocidad de desarrollo: es más lento
programar en C, sobre todo para el principiante. La razón estriba en que el
compilador de C se limita a traducir código sin apenas añadir nada. La gestión
de la memoria es un ejemplo clásico: en C el programador ha de reservar y
liberar la memoria explícitamente. En otros lenguajes (como BASIC, Matlab o
C#) la memoria es gestionada de forma transparente para el programador. Esto
alivia la carga de trabajo humano y en muchas ocasiones previene errores,
aunque también supone mayor carga de trabajo para el procesador.
El mantenimiento en algunos casos puede ser más difícil y costoso que con
ciertos lenguajes de más alto nivel. El código en C se presta a sentencias
cortas y enrevesadas de difícil interpretación. Aunque el lenguaje admite código
escrito de forma fácilmente legible, si no se siguen normas en el equipo de
programación algunos programadores pueden acabar escribiendo código difícil
de leer. Esto complica la revisión y el mantenimiento. Aunque en realidad esto
está más relacionado con el equipo de desarrollo que con el lenguaje en sí.
Cabe destacar el contexto y época en la que fue desarrollado C. En aquellos
tiempos existían muy pocos programadores, los cuales, a su vez, eran
prácticamente todos expertos en el área. De esta manera, se asumía que los
programadores eran conscientes de sus trabajos y capaces de manejar
perfectamente el lenguaje. Por esta razón es muy importante que los recién
iniciados adopten buenas prácticas a la hora de escribir en C y manejar la
memoria, como por ejemplo un uso intensivo de indentación y conocer a fondo
todo lo que implica el manejo de punteros y direcciones de memoria.
VARIANTES
Desde el inicio del lenguaje han surgido varias ramas de evolución que han
generado varios lenguajes:
Objective-C es un primer intento de proporcionar soporte para
la programación orientada a objetos en C, de escasa difusión, pero
actualmente usado en Mac OS X , iOS y GNUstep.
C++ (pronunciado C Plus Plus) diseñado por BjarneStroustrup fue el segundo
intento de proporcionar orientación a objetos a C y es la variante más
difundida y aceptada. Esta versión combina la flexibilidad y el acceso de
bajo nivel de C con las características de la programación orientada a
objetos como abstracción, encapsulación y ocultación.
También se han creado numerosos lenguajes inspirados en la sintaxis de C,
pero que no son compatibles con él:
Java, que une una sintaxis inspirada en la del C++ con una orientación a
objetos más similar a la de Smalltalk y Objective C.
JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la
sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A
la versión estandarizada se la conoce como ECMAScript.
C# (pronunciado C Sharp) es un lenguaje desarrollado
por Microsoft derivado de C/C++ y Java.
PROCESO DE COMPILACIÓN
La compilación de un programa C se realiza en varias fases que normalmente
son automatizadas y ocultadas por los entornos de desarrollo:
1. Pre procesado consistente en modificar el código fuente en C según una
serie de instrucciones (denominadas directivas de pre procesado)
simplificando de esta forma el trabajo delcompilador. Por ejemplo, una
de las acciones más importantes es la modificación de las inclusiones
(#include) por las declaraciones reales existentes en el archivo indicado.
2. Compilación que genera el código objeto a partir del código ya
preprocesado.
3. Enlazado que une los códigos objeto de los distintos módulos y
bibliotecas externas (como las bibliotecas del sistema) para generar el
programa ejecutable final.
EJEMPLO DE CÓDIGO
El siguiente programa imprime en pantalla la frase "Hola Mundo" (C99).
// necesario para utilizar printf()
# include<stdio.h>
int main(void)
{
printf("HolaMundon");
return0;
}
El siguiente escribe "Hola Mundo" en C89
/* comentarios con '//' no permitidos en C89, sí en C99 */
# include<stdio.h> /* necesario para utilizar printf */
main()/* tipo 'int' de retorno implícito */
{
printf("Hola Mundon");
return0;
}
Estructura de control "elseif"
if(condicion1){
sentencia1
}elseif(condicion2){
sentencia2
}elseif(condicion n){
sentencia n
}else{
sentencias por defecto
}
HERRAMIENTAS DE PROGRAMACIÓN
Al programar en C, es habitual usar algunas herramientas de programación de
uso muy extendido, sobre todo en entorno de tipo unix:
make: Herramienta para automatizar el proceso de compilación, enlazado,
etc.
lint: Herramienta utilizada para detectar código sospechoso, confuso o
incompatible entre distintas arquitecturas
valgrind: Herramienta utilizada para detectar posibles fugas de memoria.
gdb : Debugger de GNU utilizado para seguir la ejecución del programa.
dbx : Debugger que suele venir instalado con todos los UNIX.
ddd : Interfaz gráfico para el depurador gdb o dbx.
APLICABILIDAD
Hecho principalmente para la fluidez de programación en sistemas UNIX. Se
usa también para el desarrollo de otros sistemas
operativos como Windows o GNU/Linux. Igualmente para aplicaciones
de escritorio como GIMP, cuyo principal lenguaje de programación es C.
De la misma forma, es muy usado en aplicaciones científicas (para
experimentos informáticos, físicos, químicos, matemáticos, entre otros, parte de
ellos conocidos como modelos ysimuladores), industriales
(industria robótica, cibernética, sistemas de información y base de datos para
la industria petrolera y petroquímica. Predominan también todo lo que se refiere
asimulación de máquinas de manufactura), simulaciones de vuelo (es la más
delicada, ya que se tienen que usar demasiados recursos tanto
de hardware como de software para desarrollar aplicaciones que permitan
simular el vuelo real de una aeronave. Se aplica por tanto, en diversas áreas
desconocidas por gran parte de los usuarios noveles.
Los ordenadores de finales de los 90 son varios órdenes de magnitud más
potentes que las máquinas en que C se desarrolló originalmente. Programas
escritos en lenguajes de tipo dinámico y fácil codificación (Ruby, Python, Perl...)
que antaño hubieran resultado demasiado lentos, son lo bastante rápidos como
para desplazar en uso a C. Aun así, se puede seguir encontrando código C en
grandes desarrollos de animaciones, modelados y escenas en 3D en películas y
otras aplicaciones multimedia.
Actualmente, los grandes proyectos de software se dividen en partes, dentro de
un equipo de desarrollo. Aquellas partes que son más "burocráticas" o "de
gestión" con los recursos del sistema, se suelen realizar en lenguajes de tipo
dinámico o de guion (script), mientras que aquellas partes "críticas", por su
necesidad de rapidez de ejecución, se realizan en un lenguaje de tipo
compilado, como C o C++. Si, después de hacer la división, las partes críticas
no superan un cierto porcentaje del total (aproximadamente el 10%) entonces
todo el desarrollo se realiza con lenguajes dinámicos. Si la parte crítica no llega
a cumplir las expectativas del proyecto, se comparan las alternativas de una
inversión en nuevo hardware frente a invertir en el coste de un programador
para que reescriba dicha parte crítica.
APLICACIONES EMBEBIDAS
C es el lenguaje común para programar sistemas embebidos.[cita requerida] El
código ligero que un compilador C genera, combinado con la capacidad de
acceso a capas del software cercanas al hardware son la causa de su
popularidad en estas aplicaciones.
Una característica donde C demuestra comodidad de uso particularmente
valiosa en sistemas embebidos es la manipulación de bits. Los sistemas
contienen registros mapeados en memoria (en inglés, MMR) a través de los cuales
los periféricos se configuran. Estos registros mezclan variasconfiguraciones en
la misma dirección de memoria, aunque en bits distintos. Con C es posible
modificar fácilmente uno de estos bits sin alterar el resto. Por ejemplo:
int*mmr;/* puntero al registro que queremos modificar */
mmr=0x40008ABC;/* dirección de memoria del registro */
*mmr|=1<<7;/* pone a 1 el bit 8 sin modificar los demás */
*mmr&= ~(1<<12)/* pone a 0 el bit 13 sin modificar los demás */
Este tipo de manipulación es muy tediosa o sencillamente imposible en otros
lenguajes de alto nivel, dado que se utilizan operaciones comunes del lenguaje
ensamblador como las operaciones a nivel bit OR, AND, SHL y CPL pero que
están disponibles en el lenguaje C.
Otras características de C consideradas desventajas en la programación para
PC -como la ausencia de control de memoria automático- se convierten en
ventajas cuando los sistemas embebidos necesitan código pequeño y
optimizado. Ese es el caso de los sistemas basados en microcontroladores de
poca potencia como el intel 8051 o muchos sistemas ARM.
BIBLIOTECAS C
Una biblioteca de C es una colección de funciones utilizadas en el lenguaje de
programación C. Las bibliotecas más comunes son la biblioteca estándar de C y la
biblioteca del estándar ANSI C, la cual provee las especificaciones de los
estándares que son ampliamente compartidas entre bibliotecas. La biblioteca
ANSI C estándar, incluye funciones para la entrada y salida de archivos,
alojamiento de memoria y operaciones con datos comunes: funciones
matemáticas, funciones de manejo de cadenas de texto y funciones de hora y
fecha.
Otras bibliotecas C son aquellas utilizadas para desarrollar sistemas Unix, las
cuales proveen interfaces hacia el núcleo. Estas funciones son detalladas en
varios estándares tales como POSIXy el Single UNIX Specification.
Ya que muchos programas han sido escritos en el lenguaje C existe una gran
variedad de bibliotecas disponibles. Muchas bibliotecas son escritas en C
debido a que C genera código objetorápido; los programadores luego generan
interfaces a la biblioteca para que las rutinas puedan ser utilizadas desde
lenguajes de mayor nivel, tales como Java, Perl y Python.
LOS IDE UTILIZADOS PARA EL PROGRAMA EN C++
ENTORNO DE DESARROLLO INTEGRADO
Un entorno de desarrollo integrado, llamado también IDE (sigla en inglés
de integrated development environment), es un programa
informático compuesto por un conjunto de herramientas deprogramación.
Puede dedicarse en exclusiva a un solo lenguaje de programación o bien
puede utilizarse para varios.
Dev C++, un entorno para el lenguaje de programaciónC++
WebDevStudio, un IDE en línea para el lenguaje de programación C/C++.
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 y un constructor de interfaz gráfica (GUI). Los IDEs
pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones
existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de
las aplicaciones de Microsoft Office, lo que hace posible escribir
sentencias Visual Basic en forma de macros para Microsoft Word.
Los IDE proveen un marco de trabajo amigable para la mayoría de los
lenguajes de programación tales
como C++, PHP, Python, Java,C#, Delphi, Visual Basic, etc. En algunos
lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en
donde se permite utilizar el lenguaje de programación en forma interactiva, sin
necesidad de trabajo orientado a archivos de texto, como es el caso
de Smalltalk u Objective-C.
Componentes
Un editor de texto.
Un compilador.
Un intérprete.
Un depurador.
Un cliente.
Posibilidad de ofrecer un sistema de control de versiones.
Factibilidad para ayuda en la construcción de interfaces gráficas de usuario.
Lenguajes
Algunos entornos son compatibles con múltiples lenguajes de programación,
como Eclipse o NetBeans, ambos basados en Java; oMonoDevelop, basado
en C#. También puede incorporarse la funcionalidad para lenguajes
alternativos mediante el uso de plugins. Por ejemplo, Eclipse y NetBeans tienen
plugins para C, C++, Ada, Perl, Python, Ruby y PHP, entre otros.
Actitudes en diferentes plataformas computacionales
Muchos de los programadores de Unix argumentan que las herramientas de la
línea de comandos POSIX constituyen un IDE, aunque con un estilo diferente
de la interfaz y en el entorno Unix. Además, muchos programadores de Unix
utilizan Emacs o Vim.
En las distintas plataformas de Microsoft Windows, las herramientas de línea
de comando para el desarrollo rara vez se utilizan. En consecuencia, hay
muchas soluciones comerciales y no comerciales; sin embargo cada uno tiene
un diseño diferente que comúnmente crean incompatibilidades. La mayoría de
los principales proveedores de compiladores para Windows siguen ofreciendo
copias gratuitas de sus herramientas de línea de comando.
Además las herramientas del software libre GNU (gcc, gdb) están disponibles
en muchas plataformas, incluyendo Windows.
Algunos entornos libres, como Code::Blocks, Eclipse, Lazarus, KDevelop y
Netbeans, que a su vez se desarrollan utilizando un lenguaje multiplataforma
(por ejemplo, Free Pascal o Java), se ejecutan en diversas plataformas,
incluyendo Windows, GNU/Linux, y Mac OS X.
REFERENCIAS BIBLIOGRÁFICAS
http://es.wikipedia.org/wiki/Integrated_development_environment
http://alex-sxxc-coral.blogspot.com/2009/02/historia-del-lenguaje-c.html
http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)

Mais conteúdo relacionado

Mais procurados

Características de los 10 lenguajes de programación
 Características de los 10 lenguajes de programación Características de los 10 lenguajes de programación
Características de los 10 lenguajes de programación
Gabriel Solano
 
Reportede c#(sharp)(hugo balmore vallejo diaz)
Reportede c#(sharp)(hugo balmore vallejo diaz)Reportede c#(sharp)(hugo balmore vallejo diaz)
Reportede c#(sharp)(hugo balmore vallejo diaz)
Hugo Vallejo
 
Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)
josegonzalo130
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
monty19
 
historia de de lenguaje de programacion
historia de de lenguaje de programacionhistoria de de lenguaje de programacion
historia de de lenguaje de programacion
reychivas_07
 
Lenguaje de programacion c
Lenguaje de programacion cLenguaje de programacion c
Lenguaje de programacion c
1002pc1
 
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
Fidel_Angel
 

Mais procurados (18)

Deber
DeberDeber
Deber
 
HISTORIA DEL LENGUAJE DE PROGRAMACIÓN C++
HISTORIA DEL LENGUAJE DE PROGRAMACIÓN C++HISTORIA DEL LENGUAJE DE PROGRAMACIÓN C++
HISTORIA DEL LENGUAJE DE PROGRAMACIÓN C++
 
Jag
JagJag
Jag
 
Características de los 10 lenguajes de programación
 Características de los 10 lenguajes de programación Características de los 10 lenguajes de programación
Características de los 10 lenguajes de programación
 
01 - Introducción al lenguaje C
01 - Introducción al lenguaje C01 - Introducción al lenguaje C
01 - Introducción al lenguaje C
 
Programacion 1 feli
Programacion 1 feliProgramacion 1 feli
Programacion 1 feli
 
Reportede c#(sharp)(hugo balmore vallejo diaz)
Reportede c#(sharp)(hugo balmore vallejo diaz)Reportede c#(sharp)(hugo balmore vallejo diaz)
Reportede c#(sharp)(hugo balmore vallejo diaz)
 
Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)
 
PRESENTACION LENGUAJE C
 PRESENTACION LENGUAJE C  PRESENTACION LENGUAJE C
PRESENTACION LENGUAJE C
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
historia de de lenguaje de programacion
historia de de lenguaje de programacionhistoria de de lenguaje de programacion
historia de de lenguaje de programacion
 
historia del lenguaje c++
historia del lenguaje c++historia del lenguaje c++
historia del lenguaje c++
 
Lenguaje C sharp
Lenguaje C sharpLenguaje C sharp
Lenguaje C sharp
 
Lenguaje de programacion c
Lenguaje de programacion cLenguaje de programacion c
Lenguaje de programacion c
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Grupo 201
Grupo 201Grupo 201
Grupo 201
 
Bison y flex
Bison y flexBison y flex
Bison y flex
 
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
 

Semelhante a Pul123

Historia del C++ y JAVA
Historia del C++ y JAVAHistoria del C++ y JAVA
Historia del C++ y JAVA
Nohemi Cuesta
 
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
pedrolrc
 
C# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptualC# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptual
Fernando Jose
 
Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++
N_Alejandrino
 

Semelhante a Pul123 (20)

Historia del C++ y JAVA
Historia del C++ y JAVAHistoria del C++ y JAVA
Historia del C++ y JAVA
 
Lenguaje C Version Final 1.pptx
Lenguaje C Version Final 1.pptxLenguaje C Version Final 1.pptx
Lenguaje C Version Final 1.pptx
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Programacion 1 feli
Programacion 1 feliProgramacion 1 feli
Programacion 1 feli
 
Caracteristicas lenguajes
Caracteristicas lenguajesCaracteristicas lenguajes
Caracteristicas lenguajes
 
Lenguaje c++
Lenguaje c++Lenguaje c++
Lenguaje c++
 
Lenguaje c1
Lenguaje c1Lenguaje c1
Lenguaje c1
 
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
 
C# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptualC# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptual
 
Programacion
ProgramacionProgramacion
Programacion
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación c
 
Santaella u5 Lenguaje C++
Santaella u5 Lenguaje C++Santaella u5 Lenguaje C++
Santaella u5 Lenguaje C++
 
ENSAYO SOBRE EL LENGUAJE C
ENSAYO SOBRE EL LENGUAJE C ENSAYO SOBRE EL LENGUAJE C
ENSAYO SOBRE EL LENGUAJE C
 
331985319 santaella u5-lenguajedeprogramacionc
331985319 santaella u5-lenguajedeprogramacionc331985319 santaella u5-lenguajedeprogramacionc
331985319 santaella u5-lenguajedeprogramacionc
 
Unidad 5 Lenguaje de Programacion C y C++
Unidad 5 Lenguaje de Programacion C y C++Unidad 5 Lenguaje de Programacion C y C++
Unidad 5 Lenguaje de Programacion C y C++
 
Aplicacion de c
Aplicacion de cAplicacion de c
Aplicacion de c
 
Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++
 
Informe.
Informe.Informe.
Informe.
 
Lenguaje c.Luis Carrodeguas.16418180
Lenguaje c.Luis Carrodeguas.16418180Lenguaje c.Luis Carrodeguas.16418180
Lenguaje c.Luis Carrodeguas.16418180
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 

Pul123

  • 1. INSTITUTO TECNOLOGICO SUPERIOR PARTICULAR SAN GABRIEL ARTICULO: C++ ING: ANGEL HUILCA MATERIA: ESTRUCTURAS DE DATOS NOMBRE: PAUL VARGAS RIOBAMBA – ECUADOR 2013-1014
  • 2. C (lenguaje de programación) C Desarrollador(es) Dennis Ritchie y Bell Labs Información general Paradigma Imperativo (Procedural),Estructurado Apareció en 1972 Diseñado por Dennis M. Ritchie Última versión estable C11 (diciembre de 2011) Tipo de dato Débil, Estático Implementaciones Múltiples Dialectos Cyclone, Unified Parallel C, Split-C, Cilk, C* Influido por B (BCPL,CPL), ALGOL 68, 1 Ensamblador, PL/I,Fortran Ha influido a Vala, C#, Objective- C,C++, AWK, bc, Java, php,NXC, D Sistema operativo Multiplataforma
  • 3. 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 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 portátil entre plataformas y/o arquitecturas. FILOSOFÍA Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes. En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores. C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy
  • 4. alejados de la programación de software de sistema, para la que se diseñó originalmente. 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 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"). 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 preprocesador que traducía código fuente de C++ a C. Funciones anidadas, aunque GCC tiene esta característica como extensión.
  • 5. Soporte nativo para programación multihilo. Aunque la lista de las características útiles 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 preprocesador 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: 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 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. HISTORIA DESARROLLO INICIAL 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:
  • 6. El desarrollo de C fue el resultado del deseo de los programadores de jugar con SpaceTravel. 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 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). 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 longint.
  • 7. El tipo de datos unsignedint. Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambigüedad sintáctica de expresiones como i=-10, que se podría interpretar bien como i =- 10 o bien comoi = -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. En las primeras versiones del lenguaje, la definición de funciones se hacía mediante un 'prototipo de función' (functionprototype), el cual indicaba al compilador el tipo de retorno de la función. Aunque este método tiene una gran desventaja respecto al nuevo, debido a que no comprueba el número ni el tipo en la lista de argumentos; en otras palabras, es mucho más fácil cometer errores al hacer una llamada a una función con argumentos incorrectos. Ejemplo del "viejo estilo": intpower();/* Podria haberse omitido (*) */ power() int a, b; { int n; for(n =1; b >0;--b) n*= a; return n; } Ejemplo de la nueva definición: int power(int a,int b) { int n; for(n =1; b >0;--b) n*= a; return n; } (*) Por defecto, el tipo de retorno en C es int, por lo que la declaración entera intpower(); podría haberse omitido.
  • 8. En los años siguientes a la publicación del C de Kernighan y Ritchie, se añadieron al lenguaje muchas características no oficiales, que estaba soportadas por los compiladores de AT&T, entre otros. Algunas de estas características eran: Funciones void y el tipo de datos void *. Funciones que retornaban tipos de datos struct o union (en lugar de punteros). Asignación de tipos de datos struct. Calificador const, que hace que un objeto sea de sólo lectura. Una biblioteca estándar, que incorporaba la mayoría de las funcionalidades implementadas por varios desarrolladores de compiladores. Enumeraciones. ANSI C e ISO C A finales de la década de 1970, C empezó a sustituir a BASIC como lenguaje de programación de microcomputadores predominante. Durante la década de 1980 se empezó a usar en los IBM PC, lo que incrementó su popularidad significativamente. Al mismo tiempo, BjarneStroustrup empezó a trabajar con algunos compañeros de Bell Labs para añadir funcionalidades de programación orientada a objetos a C. El lenguaje que crearon, llamado C++, es hoy en día el lenguaje de programación de aplicaciones más común en el sistema operativo Microsoft Windows; mientras queC sigue siendo más popular en el entorno Unix. Otro lenguaje que se desarrolló en esa época, Objective C, también añadió características de programación orientada a objetos a C. Aunque hoy en día no es tan popular como C++, se usa para desarrollar aplicaciones Cocoa para Mac OS X. En 1983, el Instituto Nacional Estadounidense de Estándares organizó un comité, X3j11, para establecer una especificación estándar de C. Tras un proceso largo y arduo, se completó el estándar en 1989 y se ratificó como el "Lenguaje de Programación C" ANSI X3.159-1989. Esta versión del lenguaje se conoce a menudo como ANSI C, o a veces como C89 (para distinguirla de C99). En 1990, el estándar ANSI (con algunas modificaciones menores) fue adoptado por la Organización Internacional para la Estandarización (ISO) en el estándar ISO/IEC 9899:1990. Esta versión se conoce a veces como C90. No obstante, "C89" y "C90" se refieren en esencia al mismo lenguaje.
  • 9. Uno de los objetivos del proceso de estandarización del ANSI C fue producir una extensión al C de Kernighan y Ritchie, incorporando muchas funcionalidades no oficiales. Sin embargo, el comité de estandarización incluyó también muchas funcionalidades nuevas, como prototipos de función, y un preprocesador mejorado. También se cambió la sintaxis de la declaración de parámetros para hacerla semejante a la empleada habitualmente en C++: main(argc,argv) intargc; char**argv; { ... } pasó a ser int main(intargc,char*argv[]) { ... } ANSI C está soportado hoy en día por casi la totalidad de los compiladores. La mayoría del código C que se escribe actualmente está basado en ANSI C. Cualquier programa escrito sólo en C estándar sin código que dependa de un hardware determinado funciona correctamente en cualquier plataforma que disponga de una implementación de C compatible. Sin embargo, muchos programas han sido escritos de forma que sólo pueden compilarse en una cierta plataforma, o con un compilador concreto, esto puede ser debido a diversos motivos: La utilización de bibliotecas no estándar, como interfaces gráficas de usuario. El uso de compiladores que no cumplen las especificaciones del estándar. El uso de tipos de datos suponiendo que tendrán el mismo tamaño u orden de los bits en todas las plataformas. La macro __STDC__ puede usarse para dividir el código en secciones ANSI y K&R para el compilador. # if __STDC__ externintgetopt(int,char*const*,constchar*); # else externintgetopt(); # endif
  • 10. Algunos programadores recomiendan usar "#if __STDC__", como en el ejemplo, en lugar de "#ifdef __STDC__" porque algunos compiladores le asignan el valor cero a __STDC__ para indicar que no son compatibles con ANSI. En el siguiente ejemplo, el programa pide al usuario que introduzca un número. El programa dividirá dicho número entre 2 e imprimirá el resultado mientras que este sea par, y terminará cuando el número sea impar: #include <stdio.h> intnumero; intmain(void) { printf("Introduzca un número entero: "); scanf("%d",&numero); while(numero%2==0) { printf("%d/2 = %dn", numero, numero/2); numero/=2; } printf("%d no es entero, saliendo...n", numero); return0; } C99 Tras el proceso de estandarización de ANSI, la especificación del lenguaje C permaneció relativamente estable durante algún tiempo, mientras que C++ siguió evolucionando. Sin embargo, el estándar continuó bajo revisión a finales de la década de 1990, lo que llevó a la publicación del estándar ISO 9899:1999 en 1999. Este estándar se denomina habitualmente "C99". Se adoptó como estándar ANSI en marzo de 2000. Las nuevas características de C99 incluyen: Funciones inline. Las variables pueden declararse en cualquier sitio (como en C++), en lugar de poder declararse sólo tras otra declaración o al comienzo de una declaración compuesta.
  • 11. Muchos tipos de datos, incluyendo longlongint (para reducir el engorro de la transición de 32 bits a 64 bits), un tipo de datos booleano, y un tipo complex que representa números complejos. Arrays de longitud variable. Soporte para comentarios de una línea que empiecen con //, como en BCPL o en C++, característica para la que muchos compiladores habían dado soporte por su cuenta. muchas funciones nuevas, como snprintf() algunos headers nuevos, como stdint.h. Una consideración importante es que hasta la publicación de este estándar, C había sido mayormente un subconjunto estricto del C++. Era muy sencillo "actualizar" un programa de C hacia C++ y mantener ese código compilable en ambos lenguajes. Sin embargo, el nuevo estándar agrega algunas características que C++ no admite, como por ejemplo los inicializadores estáticos de estructuras. También define al tipo "bool" de una manera que no es exactamente la del C++. El compilador GCC, entre muchos otros, soportan hoy en día la mayoría de las nuevas características de C99. Sin embargo, este nuevo estándar ha tenido poca acogida entre algunos desarrolladores de compiladores, como Microsoft y Borland, que se han centrado en C++. Brandon Bray, de Microsoft, dijo a este respecto: "En general, hemos visto poca demanda de muchas características de C99. Algunas características tienen más demanda que otras, y consideraremos incluirlas en versiones futuras siempre que sean compatibles con C++."2 C11 C11 (antes conocido como C1X) es un nombre informal para ISO/IEC 9899:2011,3 el último estándar publicado para C. El borrador final, N1570,4 fue publicado en abril de 2011. El nuevo estándar superó su última revisión el 10 de octubre de 2011 y fue oficialmente ratificado por la ISO y publicado el 8 de diciembre de 2011.
  • 12. VENTAJAS Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas. A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos. Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes. INCONVENIENTES El mayor problema que presenta el lenguaje C frente a los lenguajes de tipo de dato dinámico es la gran diferencia en velocidad de desarrollo: es más lento programar en C, sobre todo para el principiante. La razón estriba en que el compilador de C se limita a traducir código sin apenas añadir nada. La gestión de la memoria es un ejemplo clásico: en C el programador ha de reservar y liberar la memoria explícitamente. En otros lenguajes (como BASIC, Matlab o C#) la memoria es gestionada de forma transparente para el programador. Esto alivia la carga de trabajo humano y en muchas ocasiones previene errores, aunque también supone mayor carga de trabajo para el procesador. El mantenimiento en algunos casos puede ser más difícil y costoso que con ciertos lenguajes de más alto nivel. El código en C se presta a sentencias cortas y enrevesadas de difícil interpretación. Aunque el lenguaje admite código escrito de forma fácilmente legible, si no se siguen normas en el equipo de programación algunos programadores pueden acabar escribiendo código difícil de leer. Esto complica la revisión y el mantenimiento. Aunque en realidad esto está más relacionado con el equipo de desarrollo que con el lenguaje en sí. Cabe destacar el contexto y época en la que fue desarrollado C. En aquellos tiempos existían muy pocos programadores, los cuales, a su vez, eran prácticamente todos expertos en el área. De esta manera, se asumía que los programadores eran conscientes de sus trabajos y capaces de manejar perfectamente el lenguaje. Por esta razón es muy importante que los recién iniciados adopten buenas prácticas a la hora de escribir en C y manejar la memoria, como por ejemplo un uso intensivo de indentación y conocer a fondo todo lo que implica el manejo de punteros y direcciones de memoria.
  • 13. VARIANTES Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes: Objective-C es un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS X , iOS y GNUstep. C++ (pronunciado C Plus Plus) diseñado por BjarneStroustrup fue el segundo intento de proporcionar orientación a objetos a C y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación. También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él: Java, que une una sintaxis inspirada en la del C++ con una orientación a objetos más similar a la de Smalltalk y Objective C. JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript. C# (pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de C/C++ y Java. PROCESO DE COMPILACIÓN La compilación de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo: 1. Pre procesado consistente en modificar el código fuente en C según una serie de instrucciones (denominadas directivas de pre procesado) simplificando de esta forma el trabajo delcompilador. Por ejemplo, una de las acciones más importantes es la modificación de las inclusiones (#include) por las declaraciones reales existentes en el archivo indicado. 2. Compilación que genera el código objeto a partir del código ya preprocesado. 3. Enlazado que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final.
  • 14. EJEMPLO DE CÓDIGO El siguiente programa imprime en pantalla la frase "Hola Mundo" (C99). // necesario para utilizar printf() # include<stdio.h> int main(void) { printf("HolaMundon"); return0; } El siguiente escribe "Hola Mundo" en C89 /* comentarios con '//' no permitidos en C89, sí en C99 */ # include<stdio.h> /* necesario para utilizar printf */ main()/* tipo 'int' de retorno implícito */ { printf("Hola Mundon"); return0; } Estructura de control "elseif" if(condicion1){ sentencia1 }elseif(condicion2){ sentencia2 }elseif(condicion n){ sentencia n }else{ sentencias por defecto }
  • 15. HERRAMIENTAS DE PROGRAMACIÓN Al programar en C, es habitual usar algunas herramientas de programación de uso muy extendido, sobre todo en entorno de tipo unix: make: Herramienta para automatizar el proceso de compilación, enlazado, etc. lint: Herramienta utilizada para detectar código sospechoso, confuso o incompatible entre distintas arquitecturas valgrind: Herramienta utilizada para detectar posibles fugas de memoria. gdb : Debugger de GNU utilizado para seguir la ejecución del programa. dbx : Debugger que suele venir instalado con todos los UNIX. ddd : Interfaz gráfico para el depurador gdb o dbx. APLICABILIDAD Hecho principalmente para la fluidez de programación en sistemas UNIX. Se usa también para el desarrollo de otros sistemas operativos como Windows o GNU/Linux. Igualmente para aplicaciones de escritorio como GIMP, cuyo principal lenguaje de programación es C. De la misma forma, es muy usado en aplicaciones científicas (para experimentos informáticos, físicos, químicos, matemáticos, entre otros, parte de ellos conocidos como modelos ysimuladores), industriales (industria robótica, cibernética, sistemas de información y base de datos para la industria petrolera y petroquímica. Predominan también todo lo que se refiere asimulación de máquinas de manufactura), simulaciones de vuelo (es la más delicada, ya que se tienen que usar demasiados recursos tanto de hardware como de software para desarrollar aplicaciones que permitan simular el vuelo real de una aeronave. Se aplica por tanto, en diversas áreas desconocidas por gran parte de los usuarios noveles. Los ordenadores de finales de los 90 son varios órdenes de magnitud más potentes que las máquinas en que C se desarrolló originalmente. Programas escritos en lenguajes de tipo dinámico y fácil codificación (Ruby, Python, Perl...) que antaño hubieran resultado demasiado lentos, son lo bastante rápidos como para desplazar en uso a C. Aun así, se puede seguir encontrando código C en grandes desarrollos de animaciones, modelados y escenas en 3D en películas y otras aplicaciones multimedia.
  • 16. Actualmente, los grandes proyectos de software se dividen en partes, dentro de un equipo de desarrollo. Aquellas partes que son más "burocráticas" o "de gestión" con los recursos del sistema, se suelen realizar en lenguajes de tipo dinámico o de guion (script), mientras que aquellas partes "críticas", por su necesidad de rapidez de ejecución, se realizan en un lenguaje de tipo compilado, como C o C++. Si, después de hacer la división, las partes críticas no superan un cierto porcentaje del total (aproximadamente el 10%) entonces todo el desarrollo se realiza con lenguajes dinámicos. Si la parte crítica no llega a cumplir las expectativas del proyecto, se comparan las alternativas de una inversión en nuevo hardware frente a invertir en el coste de un programador para que reescriba dicha parte crítica. APLICACIONES EMBEBIDAS C es el lenguaje común para programar sistemas embebidos.[cita requerida] El código ligero que un compilador C genera, combinado con la capacidad de acceso a capas del software cercanas al hardware son la causa de su popularidad en estas aplicaciones. Una característica donde C demuestra comodidad de uso particularmente valiosa en sistemas embebidos es la manipulación de bits. Los sistemas contienen registros mapeados en memoria (en inglés, MMR) a través de los cuales los periféricos se configuran. Estos registros mezclan variasconfiguraciones en la misma dirección de memoria, aunque en bits distintos. Con C es posible modificar fácilmente uno de estos bits sin alterar el resto. Por ejemplo: int*mmr;/* puntero al registro que queremos modificar */ mmr=0x40008ABC;/* dirección de memoria del registro */ *mmr|=1<<7;/* pone a 1 el bit 8 sin modificar los demás */ *mmr&= ~(1<<12)/* pone a 0 el bit 13 sin modificar los demás */ Este tipo de manipulación es muy tediosa o sencillamente imposible en otros lenguajes de alto nivel, dado que se utilizan operaciones comunes del lenguaje ensamblador como las operaciones a nivel bit OR, AND, SHL y CPL pero que están disponibles en el lenguaje C.
  • 17. Otras características de C consideradas desventajas en la programación para PC -como la ausencia de control de memoria automático- se convierten en ventajas cuando los sistemas embebidos necesitan código pequeño y optimizado. Ese es el caso de los sistemas basados en microcontroladores de poca potencia como el intel 8051 o muchos sistemas ARM. BIBLIOTECAS C Una biblioteca de C es una colección de funciones utilizadas en el lenguaje de programación C. Las bibliotecas más comunes son la biblioteca estándar de C y la biblioteca del estándar ANSI C, la cual provee las especificaciones de los estándares que son ampliamente compartidas entre bibliotecas. La biblioteca ANSI C estándar, incluye funciones para la entrada y salida de archivos, alojamiento de memoria y operaciones con datos comunes: funciones matemáticas, funciones de manejo de cadenas de texto y funciones de hora y fecha. Otras bibliotecas C son aquellas utilizadas para desarrollar sistemas Unix, las cuales proveen interfaces hacia el núcleo. Estas funciones son detalladas en varios estándares tales como POSIXy el Single UNIX Specification. Ya que muchos programas han sido escritos en el lenguaje C existe una gran variedad de bibliotecas disponibles. Muchas bibliotecas son escritas en C debido a que C genera código objetorápido; los programadores luego generan interfaces a la biblioteca para que las rutinas puedan ser utilizadas desde lenguajes de mayor nivel, tales como Java, Perl y Python. LOS IDE UTILIZADOS PARA EL PROGRAMA EN C++ ENTORNO DE DESARROLLO INTEGRADO Un entorno de desarrollo integrado, llamado también IDE (sigla en inglés de integrated development environment), es un programa informático compuesto por un conjunto de herramientas deprogramación. Puede dedicarse en exclusiva a un solo lenguaje de programación o bien puede utilizarse para varios.
  • 18. Dev C++, un entorno para el lenguaje de programaciónC++ WebDevStudio, un IDE en línea para el lenguaje de programación C/C++. 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 y un constructor de interfaz gráfica (GUI). Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macros para Microsoft Word. Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, PHP, Python, Java,C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en
  • 19. donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el caso de Smalltalk u Objective-C. Componentes Un editor de texto. Un compilador. Un intérprete. Un depurador. Un cliente. Posibilidad de ofrecer un sistema de control de versiones. Factibilidad para ayuda en la construcción de interfaces gráficas de usuario. Lenguajes Algunos entornos son compatibles con múltiples lenguajes de programación, como Eclipse o NetBeans, ambos basados en Java; oMonoDevelop, basado en C#. También puede incorporarse la funcionalidad para lenguajes alternativos mediante el uso de plugins. Por ejemplo, Eclipse y NetBeans tienen plugins para C, C++, Ada, Perl, Python, Ruby y PHP, entre otros. Actitudes en diferentes plataformas computacionales Muchos de los programadores de Unix argumentan que las herramientas de la línea de comandos POSIX constituyen un IDE, aunque con un estilo diferente de la interfaz y en el entorno Unix. Además, muchos programadores de Unix utilizan Emacs o Vim. En las distintas plataformas de Microsoft Windows, las herramientas de línea de comando para el desarrollo rara vez se utilizan. En consecuencia, hay muchas soluciones comerciales y no comerciales; sin embargo cada uno tiene un diseño diferente que comúnmente crean incompatibilidades. La mayoría de los principales proveedores de compiladores para Windows siguen ofreciendo copias gratuitas de sus herramientas de línea de comando. Además las herramientas del software libre GNU (gcc, gdb) están disponibles en muchas plataformas, incluyendo Windows.
  • 20. Algunos entornos libres, como Code::Blocks, Eclipse, Lazarus, KDevelop y Netbeans, que a su vez se desarrollan utilizando un lenguaje multiplataforma (por ejemplo, Free Pascal o Java), se ejecutan en diversas plataformas, incluyendo Windows, GNU/Linux, y Mac OS X. REFERENCIAS BIBLIOGRÁFICAS http://es.wikipedia.org/wiki/Integrated_development_environment http://alex-sxxc-coral.blogspot.com/2009/02/historia-del-lenguaje-c.html http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)