You are on page 1of 16

C (lenguaje de programacin)

Para el libro, vase El lenguaje de programacin C.


Para otros usos de este trmino, vase C (desambiguacin).

C
Desarrollador(es)

Dennis M. Ritchie y Bell Labs

Informacin general

Extensiones

.h .c

comunes

Paradigma

Imperativo (Procedural),Estructurado

Apareci en

1972

Diseado por

Dennis M. Ritchie

ltima versin

C11 (diciembre de 2011)

estable

Tipo de dato

Dbil, Esttico

Implementacio

GCC, Intel C, entre muchas ms.

nes

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, JavaS


cript,PHP, Perl, NXC, D, Go

Sistema

Multiplataforma

operativo

[editar datos en Wikidata]

C es un lenguaje de programacin creado en 1972 por Dennis M. Ritchie en


los Laboratorios Bell como evolucin del anterior lenguaje B, a su vez basado en BCPL.
Al igual que B, es un lenguaje orientado a la implementacin de Sistemas Operativos,
concretamente Unix. C es apreciado por la eficiencia del cdigo que produce y es el
lenguaje de programacin ms popular para crear software de sistemas, aunque tambin
se utiliza para crear aplicaciones.
Se trata de un lenguaje de tipos de datos estticos, dbilmente tipificado, de medio
nivel pero con muchas caractersticas de bajo nivel. Dispone de las estructuras tpicas 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 cdigo enensamblador con cdigo C o acceder
directamente a memoria o dispositivos perifricos.
La primera estandarizacin del lenguaje C fue en ANSI, con el estndar X3.159-1989. El
lenguaje que define este estndar fue conocido vulgarmente como ANSI C.
Posteriormente, en 1990, fue ratificado como estndar ISO (ISO/IEC 9899:1990). La
adopcin de este estndar es muy amplia por lo que, si los programas creados lo siguen,
el cdigo es portable entre plataformas y/o arquitecturas.
ndice
[ocultar]

1 Filosofa

2 Caractersticas
o

2.1 Propiedades

2.2 Carencias

3 Historia
o

3.1 Desarrollo inicial

3.2 El C de Kernighan y Ritchie

3.3 ANSI C e ISO C

3.4 C99

3.5 C11
4 Ventajas

5 Inconvenientes

6 Variantes

7 Proceso de compilacin
o

7.1 Ejemplo de cdigo

8 Herramientas de programacin

9 Aplicabilidad
o

9.1 Aplicaciones embebidas

10 Bibliotecas C

11 Vase tambin

12 Referencias

13 Enlaces externos

Filosofa[editar]
Uno de los objetivos de diseo del lenguaje C es que slo sean necesarias unas pocas
instrucciones en lenguaje mquina para traducir cada elemento del lenguaje, sin que haga
falta un soporte intenso en tiempo de ejecucin. Es muy posible escribir C a bajo nivel de
abstraccin; 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
caractersticas, se pueden desarrollar compiladores de C fcilmente. En consecuencia, el
lenguaje C est disponible en un amplio abanico de plataformas (ms que cualquier otro
lenguaje). Adems, a pesar de su naturaleza de bajo nivel, el lenguaje se desarroll para
incentivar la programacin independiente de la mquina. Un programa escrito cumpliendo
los estndares e intentando que sea porttil 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 programacin de software de sistema, para la que se dise originalmente.

Caractersticas[editar]
Propiedades[editar]

Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como


funciones matemticas y de manejo de archivos, proporcionadas por bibliotecas.

Es un lenguaje muy flexible que permite programar con mltiples estilos. Uno de
los ms 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 mltiples archivos de cdigo 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 parmetros a una funcin se realiza por valor. El paso por
referencia se consigue pasando explcitamente a las funciones las direcciones de
memoria de dichos parmetros.

Punteros a funciones y variables estticas, 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[editar]

Recoleccin 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 programacin orientada a objetos, aunque la implementacin original


de C++ fue un preprocesador que traduca cdigo fuente de C++ a C.

Funciones anidadas, aunque GCC tiene esta caracterstica como extensin.

Soporte nativo para programacin multihilo.

Aunque la lista de las caractersticas tiles de las que carece C es larga, este factor ha
sido importante para su aceptacin, porque escribir rpidamente nuevos compiladorespara
nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo
del programador, y permite implementar la solucin ms natural para cada plataforma.
sta es la causa de que a menudo C sea ms eficiente que otros lenguajes. Tpicamente,
slo la programacin cuidadosa en lenguaje ensamblador produce un cdigo ms rpido,

pues da control total sobre la mquina, 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 caracterstica inexistente puede aproximarse. Por ejemplo, la
implementacin original de C++ consista en un preprocesador que traduca cdigo fuente
C++ a C. La mayora 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
funcin. Mediante el paso de este puntero como un argumento de funcin, esta
funcionalidad puede desempearse en C. Por ejemplo, en C++ se puede escribir:
stack.push(val);
Mientras que en C se podra 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[editar]
Desarrollo inicial[editar]
El desarrollo inicial de C se llev a cabo en los Laboratorios Bell de AT&T entre 1969 y
1973; segn Ritchie, el periodo ms creativo tuvo lugar en 1972. Se le dio el nombre "C"
porque muchas de sus caractersticas 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. Haban estado jugando en el mainframe de su compaa, pero
debido a su poca capacidad de proceso y al tener que soportar 100 usuarios,
Thompson y Ritchie no tenan 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 mquina no tena sistema operativo, as que decidieron
escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que haba
en su oficina, pero era muy costoso, pues todo el cdigo estaba escrito en lenguaje
ensamblador. Entonces decidieron usar un lenguaje de alto nivel y porttil para que el
sistema operativo se pudiera portar fcilmente de un ordenador a otro. Consideraron
usar B, pero careca de las funcionalidades necesarias para aprovechar algunas
caractersticas avanzadas del PDP-11. Entonces empezaron a crear un nuevo
lenguaje, C.

La justificacin para obtener el ordenador original que se us para desarrollar Unix


fue crear un sistema que automatizase el archivo de patentes. La versin original de
Unix se desarroll en lenguaje ensamblador. Ms tarde, el lenguaje C se desarroll
para poder reescribir el sistema operativo.

En 1973, el lenguaje C se haba 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 ncleos de sistema operativo implementados en un lenguaje distinto al


ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, yMaster
Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).

El C de Kernighan y Ritchie[editar]
En 1978, Ritchie y Brian Kernighan publicaron la primera edicin de El lenguaje de
programacin C, tambin conocido como La biblia de C. Este libro fue durante aos
laespecificacin 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 edicin del libro cubre el estndar ANSI C, descrito ms abajo).
Kernighan y Ritchie introdujeron las siguientes caractersticas 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


ambigedad sintctica de expresiones como i=-10 , que se podra interpretar bien
como i =- 10 o bien como i = -10 .

El C de Kernighan y Ritchie es el subconjunto ms bsico del lenguaje que un compilador


debe de soportar. Durante muchos aos, incluso tras la introduccin del ANSI C, fue
considerado "el mnimo comn denominador" en el que los programadores deban
programar cuando deseaban que sus programas fueran transportables, pues no todos los
compiladores soportaban completamente ANSI, y el cdigo razonablemente bien escrito en
K&R C es tambin cdigo ANSI C vlido.
En las primeras versiones del lenguaje, la definicin de funciones se haca mediante un
'prototipo de funcin' (function prototype), el cual indicaba al compilador el tipo de retorno
de la funcin. Aunque este mtodo tiene una gran desventaja respecto al nuevo, debido a
que no comprueba el nmero ni el tipo en la lista de argumentos; en otras palabras, es
mucho ms fcil cometer errores al hacer una llamada a una funcin con argumentos
incorrectos.
Ejemplo del "viejo estilo":
int power(); /* Podria haberse omitido (*) */
power()
int a, b;
{
int n;
for (n = 1; b > 0; --b)
n *= a;
return n;
}
Ejemplo de la nueva definicin:
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 declaracin entera int
power(); podra haberse omitido.
En los aos siguientes a la publicacin del C de Kernighan y Ritchie, se aadieron al
lenguaje muchas caractersticas no oficiales, que estaba soportadas por los compiladores
de AT&T, entre otros. Algunas de estas caractersticas eran:

Funciones void y el tipo de datos void * .

Funciones que retornaban tipos de datos struct o union (en lugar de punteros).

Asignacin de tipos de datos struct .

Calificador const , que hace que un objeto sea de slo lectura.

Una biblioteca estndar, que incorporaba la mayora de las funcionalidades


implementadas por varios desarrolladores de compiladores.

Enumeraciones.

ANSI C e ISO C[editar]


Artculo principal: ANSI C

A finales de la dcada de 1970, C empez a sustituir a BASIC como lenguaje de


programacin de microcomputadores predominante. Durante la dcada de 1980 se
empez a usar en los IBM PC, lo que increment su popularidad significativamente. Al
mismo tiempo, Bjarne Stroustrup empez a trabajar con algunos compaeros de Bell Labs
para aadir funcionalidades de programacin orientada a objetos a C. El lenguaje que
crearon, llamado C++, es hoy en da el lenguaje de programacin de aplicaciones ms
comn en el sistema operativo Microsoft Windows; mientras que C sigue siendo ms
popular en el entorno Unix. Otro lenguaje que se desarroll en esa poca, Objective C,
tambin aadi caractersticas de programacin orientada a objetos a C. Aunque hoy en
da no es tan popular como C++, se usa para desarrollar aplicaciones Cocoa para Mac OS
X.
En 1983, el Instituto Nacional Estadounidense de Estndares organiz un comit, X3j11,
para establecer una especificacin estndar de C. Tras un proceso largo y arduo, se
complet el estndar en 1989 y se ratific como el "Lenguaje de Programacin C" ANSI
X3.159-1989. Esta versin del lenguaje se conoce a menudo como ANSI C, o a veces
como C89 (para distinguirla de C99).
En 1990, el estndar ANSI (con algunas modificaciones menores) fue adoptado por
la Organizacin Internacional para la Estandarizacin (ISO) en el estndar ISO/IEC
9899:1990. Esta versin 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 estandarizacin del ANSI C fue producir una extensin
al C de Kernighan y Ritchie, incorporando muchas funcionalidades no oficiales. Sin
embargo, el comit de estandarizacin incluy tambin muchas funcionalidades nuevas,
como prototipos de funcin, y un preprocesador mejorado. Tambin se cambi la sintaxis

de la declaracin de parmetros para hacerla semejante a la empleada habitualmente en


C++:
main(argc, argv)
int argc;
char **argv;
{
...
}
pas a ser
int main(int argc, char *argv[]) {
...
}
ANSI C est soportado hoy en da por casi la totalidad de los compiladores. La mayora del
cdigo C que se escribe actualmente est basado en ANSI C. Cualquier programa
escrito slo en C estndar sin cdigo que dependa de un hardware determinado funciona
correctamente en cualquier plataforma que disponga de una implementacin de C
compatible. Sin embargo, muchos programas han sido escritos de forma que slo pueden
compilarse en una cierta plataforma, o con un compilador concreto, esto puede ser debido
a diversos motivos:

La utilizacin de bibliotecas no estndar, como interfaces grficas de usuario.

El uso de compiladores que no cumplen las especificaciones del estndar.

El uso de tipos de datos suponiendo que tendrn el mismo tamao u orden de los
bits en todas las plataformas.

La macro __STDC__ puede usarse para dividir el cdigo en secciones ANSI y K&R para el
compilador.
# if __STDC__
extern int getopt(int,char * const *,const char *);
# else
extern int getopt();
# 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 nmero. El
programa dividir dicho nmero entre 2 e imprimir el resultado mientras que este sea par,
y terminar cuando el nmero sea impar:
#include <stdio.h>
int main(void) {
int numero;
fputs("Introduzca un numero entero par: ", stdout);

scanf("%d", &numero);
if (!numero) {
fputs("Error: numero no valido.\n", stderr);
return -1;
}
int i = 1;
while (numero%2 == 0) {
printf ("%.3d| %d/2 =", i++, numero);
numero /=2;
printf("%d\n", numero);
}
printf ("No se puede seguir dividiendo: El numero %d es
impar.\n", numero);
return 0;
}

C99[editar]
Tras el proceso de estandarizacin de ANSI, la especificacin del lenguaje C permaneci
relativamente estable durante algn tiempo, mientras que C++ sigui evolucionando. Sin
embargo, el estndar continu bajo revisin a finales de la dcada de 1990, lo que llev a
la publicacin del estndar ISO 9899:1999 en 1999. Este estndar se denomina
habitualmente "C99". Se adopt como estndar ANSI en marzo de 2000.
Las nuevas caractersticas de C99 incluyen:

Funciones inline.

Las variables pueden declararse en cualquier sitio (como en C++), en lugar de


poder declararse slo tras otra declaracin o al comienzo de una declaracin
compuesta.

Muchos tipos de datos, incluyendo long long int (para reducir el engorro de la
transicin de 32 bits a 64 bits), un tipo de datos booleano, y un tipo complex que
representa nmeros complejos.

Arrays de longitud variable.

Soporte para comentarios de una lnea que empiecen con // , como en BCPL o en
C++, caracterstica para la que muchos compiladores haban dado soporte por su
cuenta.

muchas funciones nuevas, como snprintf()

algunos headers nuevos, como stdint.h .

Una consideracin importante es que hasta la publicacin de este estndar, C haba sido
mayormente un subconjunto estricto del C++. Era muy sencillo "actualizar" un programa de
C hacia C++ y mantener ese cdigo compilable en ambos lenguajes. Sin embargo, el
nuevo estndar agrega algunas caractersticas que C++ no admite, como por ejemplo los
inicializadores estticos de estructuras. Tambin define al tipo "bool" de una manera que
no es exactamente la del C++.
El compilador GCC, entre muchos otros, soportan hoy en da la mayora de las nuevas
caractersticas de C99. Sin embargo, este nuevo estndar 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 caractersticas de C99. Algunas caractersticas
tienen ms demanda que otras, y consideraremos incluirlas en versiones futuras siempre que sean
compatibles con C++."2

C11[editar]
C11 (antes conocido como C1X) es un nombre informal para ISO/IEC 9899:2011,3 el ltimo
estndar publicado para C. El borrador final, N1570, 4 fue publicado en abril de 2011. El
nuevo estndar super su ltima revisin el 10 de octubre de 2011 y fue oficialmente
ratificado por la ISO y publicado el 8 de diciembre de 2011.

Ventajas[editar]

Lenguaje muy eficiente puesto que es posible utilizar sus caractersticas de bajo
nivel para realizar implementaciones ptimas.

A pesar de su bajo nivel es el lenguaje ms portado en existencia,


habiendo compiladores para casi todos los sistemas conocidos.

Proporciona facilidades para realizar programas modulares y/o utilizar cdigo o


bibliotecas existentes.

Inconvenientes[editar]
El mayor problema que presenta el lenguaje C frente a los lenguajes de tipo de
dato dinmico es la gran diferencia en velocidad de desarrollo: es ms lento programar en
C, sobre todo para el principiante. La razn estriba en que el compilador de C se limita a
traducir cdigo sin apenas aadir nada. La gestin de la memoria es un ejemplo clsico:
en C el programador ha de reservar y liberar la memoria explcitamente. 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 evita
errores, aunque tambin supone mayor carga de trabajo para el procesador.
El mantenimiento en algunos casos puede ser ms difcil y costoso que con ciertos
lenguajes de ms alto nivel. El cdigo en C se presta a sentencias cortas y enrevesadas
de difcil interpretacin[cita requerida].
Cabe destacar el contexto y poca en la que fue desarrollado C. En aquellos tiempos
existan muy pocos programadores, los cuales, a su vez, eran prcticamente todos
expertos en el rea. De esta manera, se asuma que los programadores eran conscientes
de sus trabajos y capaces de manejar perfectamente el lenguaje. Por esta razn es muy
importante que los recin iniciados adopten buenas prcticas a la hora de escribir en C y
manejar la memoria, como por ejemplo un uso intensivo de indentacin y conocer a fondo
todo lo que implica el manejo de punteros y direcciones de memoria.

Variantes[editar]
Desde el inicio del lenguaje han surgido varias ramas de evolucin que han generado
varios lenguajes:

Objective-C es un primer intento de proporcionar soporte para la programacin


orientada a objetos en C, pero actualmente usado en Mac OS X, iOS y GNUstep.

C++ (pronunciado C Plus Plus) diseado por Bjarne Stroustrup fue el segundo
intento de proporcionar orientacin a objetos a C y es la variante ms difundida y
aceptada. Esta versin combina la flexibilidad y el acceso de bajo nivel de C con las
caractersticas de la programacin orientada a objetos como abstraccin,
encapsulacin y ocultacin.

Tambin 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 orientacin a objetos
ms similar a la de Smalltalk y Objective C.

JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis


de Java diseado para dar a las pginas web mayor interactividad. A la versin
estandarizada se la conoce como ECMAScript.

C# (pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de


C/C++ y Java.

Proceso de compilacin[editar]
La compilacin de un programa C se realiza en varias fases que normalmente son
automatizadas y ocultadas por los entornos de desarrollo:
1. Preprocesado consistente en modificar el cdigo fuente en C segn una serie de
instrucciones (denominadas directivas de preprocesado) simplificando de esta
forma el trabajo del compilador. Por ejemplo, una de las acciones ms importantes
es la modificacin de las inclusiones ( #include ) por las declaraciones reales
existentes en el archivo indicado.
2. Compilacin que genera el cdigo objeto a partir del cdigo ya preprocesado.
3. Enlazado que une los cdigos objeto de los distintos mdulos y bibliotecas
externas (como las bibliotecas del sistema) para generar el programa ejecutable
final.

Ejemplo de cdigo[editar]

El siguiente programa imprime en pantalla la frase "Hola Mundo" (C99).


// necesario para utilizar printf()
# include <stdio.h>
int main(void)
{
printf("Hola Mundo\n");
return 0;
}
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 implcito */
{
printf ("Hola Mundo\n") ;
return 0;
}
Estructura de control "else if"
if (condicion 1) {
sentencia 1
} else if (condicion 2){
sentencia 2
} else if (condicion n){
sentencia n
} else {
sentencias por defecto
}

Herramientas de programacin[editar]
Al programar en C, es habitual usar algunas herramientas de programacin de uso muy
extendido, sobre todo en entorno de tipo unix:

make: Herramienta para automatizar el proceso de compilacin, enlazado, etc.

lint: Herramienta utilizada para detectar cdigo sospechoso, confuso o


incompatible entre distintas arquitecturas

valgrind: Herramienta utilizada para detectar posibles fugas de memoria.

gdb : Debugger de GNU utilizado para seguir la ejecucin del programa.

dbx : Debugger que suele venir instalado con todos los UNIX.

ddd : Interfaz grfico para el depurador gdb o dbx.

Aplicabilidad[editar]
Hecho principalmente para la fluidez de programacin en sistemas UNIX. Se usa tambin
para el desarrollo de otros sistemas operativos como Windows o GNU/Linux. Igualmente
para aplicaciones de escritorio como GIMP, cuyo principal lenguaje de programacin es C.
De la misma forma, es muy usado en aplicaciones cientficas (para experimentos
informticos, fsicos, qumicos, matemticos, entre otros, parte de ellos conocidos
comomodelos y simuladores), industriales (industria robtica, ciberntica, sistemas de
informacin y base de datos para la industria petrolera y petroqumica. Predominan
tambin todo lo que se refiere a simulacin de mquinas de manufactura), simulaciones de
vuelo (es la ms delicada, ya que se tienen que usar demasiados recursos tanto
de hardwarecomo 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 losusuarios noveles.
Los ordenadores de finales de los 90 son varios rdenes de magnitud ms potentes que
las mquinas en que C se desarroll originalmente. Programas escritos en lenguajes de
tipo dinmico y fcil codificacin (Ruby, Python, Perl...) que antao hubieran resultado
demasiado lentos, son lo bastante rpidos como para desplazar en uso a C. Aun as, se
puede seguir encontrando cdigo C en grandes desarrollos de animaciones, modelados
y escenas en 3D en pelculas y otras aplicaciones multimedia.
Actualmente, los grandes proyectos de software se dividen en partes, dentro de un equipo
de desarrollo. Aquellas partes que son ms "burocrticas" o "de gestin" con los recursos
del sistema, se suelen realizar en lenguajes de tipo dinmico o de guion (script), mientras
que aquellas partes "crticas", por su necesidad de rapidez de ejecucin, se realizan en un
lenguaje de tipo compilado, como C o C++. Si, despus de hacer la divisin, las partes
crticas no superan un cierto porcentaje del total (aproximadamente el 10%) entonces todo
el desarrollo se realiza con lenguajes dinmicos. Si la parte crtica no llega a cumplir las
expectativas del proyecto, se comparan las alternativas de una inversin en nuevo
hardware frente a invertir en el coste de un programador para que reescriba dicha parte
crtica[cita requerida].

Aplicaciones embebidas[editar]
C es el lenguaje comn para programar sistemas embebidos.[cita requerida] El cdigo 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 caracterstica donde C demuestra comodidad de uso particularmente valiosa en
sistemas embebidos es la manipulacin de bits. Los sistemas contienen registros
mapeados en memoria (en ingls, MMR) a travs de los cuales los perifricos se
configuran. Estos registros mezclan varias configuraciones en la misma direccin de
memoria, aunque en bits distintos. Con C es posible modificar fcilmente uno de estos bits
sin alterar el resto. Por ejemplo:
int *mmr; /* puntero al registro que queremos modificar */
mmr = 0x40008ABC; /* direccin de memoria del registro */

* mmr |= 1<<7; /* pone a 1 el bit 8 sin modificar los dems */


* mmr &= ~(1<<12) /* pone a 0 el bit 13 sin modificar los dems */
Este tipo de manipulacin 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 estn disponibles en el lenguaje
C.
Otras caractersticas de C consideradas desventajas en la programacin para PC -como la
ausencia de control de memoria automtico- se convierten en ventajas cuando los
sistemas embebidos necesitan cdigo pequeo 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[editar]
Una biblioteca de C es una coleccin de funciones utilizadas en el lenguaje de
programacin C. Las bibliotecas ms comunes son la biblioteca estndar de C y la
biblioteca delestndar ANSI C, la cual provee las especificaciones de los estndares que
son ampliamente compartidas entre bibliotecas. La biblioteca ANSI C estndar, incluye
funciones para la entrada y salida de archivos, alojamiento de memoria y operaciones con
datos comunes: funciones matemticas, 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 ncleo. Estas funciones son detalladas en varios estndares
tales como POSIX y 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 generacdigo
objeto rpido; 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.

Vase tambin[editar]

Biblioteca estndar de C

Operadores de C y C++

Compilador

Preprocesador

Enlazador

GCC

C++

Referencias[editar]

1.

Volver arriba Dennis M. Ritchie (Enero de 1993). The Development of the C


Language (en ingls). Consultado el 01-01-2008. The scheme of type composition
adopted by C owes considerable debt to Algol 68, although it did not, perhaps, emerge in a
form that Algol's adherents would approve of..

2.

Volver arriba Content not found. Consultado el 2009.

3.

Volver
arriba http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?
csnumber=57853

4.

Volver arriba WG14 N1570 Committee Draft April 12, 2011

Enlaces externos[editar]

Wikiversidad alberga proyectos de aprendizaje sobre C (lenguaje de


programacin).

Wikilibros alberga un libro o manual sobre Programacin en C.

Estndar Internacional ISO/IEC 9899:TC3 Estndar ANSI C99

VideoTutorial C desde cero.

C evolution

video-curso lenguaje c

Comunidad de C

Introduccin al lenguaje C

Curso de lenguaje C de Carlos Pes

Grupo de noticias sobre el lenguaje C

Grupo de noticias sobre el lenguaje C

Curso de lenguaje C (CCS) para microcontroladores

Coding Programmer Page / C Library Reference and Examples (english)

Wikimedia Commons alberga contenido multimedia sobre C.


Categora:
Lenguaje de programacin C

You might also like