Está en la página 1de 12

C (lenguaje de programaci�n)

Ir a la navegaci�nIr a la b�squeda
Commons-emblem-issue.svg
En este art�culo se detectaron varios problemas, por favor, ed�talo para mejorarlo:
No tiene una redacci�n neutral. Por favor, discute este problema en la discusi�n.
Necesita referencias adicionales para su verificaci�n.
Existen dudas o desacuerdos sobre la exactitud de su redacci�n.
Por favor, debate este problema en la p�gina de discusi�n.
Podr�a contener informaci�n desactualizada.
Podr�a ser dif�cil de entender para lectores interesados en el tema.
Estas deficiencias fueron encontradas el 4 de mayo de 2019.
Para el libro, v�ase El lenguaje de programaci�n C.
Para otros usos de este t�rmino, v�ase C (desambiguaci�n).
C
The C Programming Language logo.svg
Gedit hello world.png
Desarrollador(es)
Dennis Ritchie y Laboratorios Bell
Informaci�n general
Extensiones comunes .c, .h
Paradigma Imperativo (procedural), estructurado
Apareci� en 1972
Dise�ado por Dennis Ritchie
�ltima versi�n estable C18 (junio de 2018)
Sistema de tipos D�bil, est�tico
Implementaciones GCC, Intel C, entre muchas m�s.
Dialectos Cyclone, Unified Parallel C, Split-C, Cilk, C*
Influido por
B (BCPL, CPL), ALGOL 68,1?:201-208

Ensamblador, PL/I, Fortran


Ha influido a Vala, C#, Objective-C, C++, AWK, bc, Java, JavaScript, PHP, Perl,
NXC, D, Go
Sistema operativo Multiplataforma
[editar datos en Wikidata]
C es un lenguaje de programaci�n de prop�sito general2?:1 originalmente
desarrollado por Dennis Ritchie entre 1969 y 1972 en los Laboratorios Bell,1? como
evoluci�n del anterior lenguaje B, a su vez basado en BCPL.2?:13?4?

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
sistema, 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, ya que dispone de las estructuras t�picas de los lenguajes de alto
nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un
control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje
que posibilitan mezclar c�digo en ensamblador con c�digo C o acceder directamente a
memoria o dispositivos perif�ricos.

La primera estandarizaci�n del lenguaje C fue en ANSI, con el est�ndar X3.159-1989.


El lenguaje que define este est�ndar fue conocido vulgarmente como ANSI C.
Posteriormente, en 1990, fue ratificado como est�ndar ISO (ISO/IEC 9899:1990). La
adopci�n de este est�ndar es muy amplia por lo que, si los programas creados lo
siguen, el c�digo es portable entre plataformas y/o arquitecturas.

�ndice
1 Filosof�a
2 Caracter�sticas
2.1 Propiedades
2.2 Precauciones que se debe tener por ser un lenguaje de bajo nivel
3 Historia
3.1 Desarrollo inicial
3.2 El C de Kernighan y Ritchie
3.3 ANSI C e ISO C
3.3.1 Palabras reservadas de ANSI-C
3.4 C99
3.5 C11
3.6 C embebido
3.7 C18
4 Lenguajes derivados de C
5 Proceso de compilaci�n
5.1 Ejemplo de c�digo
6 Herramientas de programaci�n
7 Aplicabilidad
7.1 Aplicaciones embebidas
8 Bibliotecas C
9 V�ase tambi�n
10 Referencias
11 Enlaces externos
Filosof�a
Uno de los objetivos de dise�o del lenguaje C es que solo 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
Commons-emblem-issue.svg
En esta secci�n se detectaron varios problemas, para mejorarla, pulsa [editar]
junto a su t�tulo:
No tiene una redacci�n neutral. Por favor, discute este problema en la discusi�n.
Necesita referencias adicionales para su verificaci�n.
Existen dudas o desacuerdos sobre la exactitud de su redacci�n.
Por favor, debate este problema en la p�gina de discusi�n.
Estas deficiencias fueron encontradas el 4 de mayo de 2019.
Propiedades
N�cleo del lenguaje simple, con funcionalidades a�adidas importantes, como
funciones matem�ticas y de gesti�n de archivos, proporcionadas por bibliotecas.
Es un lenguaje estructurado, i.e. tiene estructuras de control y tipos de datos
estructurados definidos por el programador a partir de los tipos at�micos t�picos y
mediante arreglos, estructuras, uniones y apuntadores, incluidos los apuntadores a
funci�n.
En su primera edici�n no hab�a advertencias sobre asignar a una variable un valor
un tipo distinto. Por lo que hab�a un programa llamado lint que detectaba este tipo
de errores. Actualmente los compiladores pueden detectar inconsistencias de tipos y
otros errores.
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 apuntadores o punteros.
Manejo de Interrupciones mediante la biblioteca signal.
Un conjunto reducido de palabras clave.
El llamado a funciones es por valor. Aunque se pueden pasar apuntadores a variables
para hacer llamados por referencia.
Distintos tipos de almacenamiento que permiten un dise�o modular.
La palabra clave static permite encapsular variables y funciones.

Las estructuras se declaran mediante la palabra clave struct, implementan el


producto cartesiano de tipos tambi�n llamados registros.
Y la uni�n disyunta, tambi�n llamada suma, co-producto o tipos variantes, se
declara con la palabra clave union. Las estructuras y uniones permiten la
implementaci�n de �rboles.

Lenguaje muy eficiente puesto que es posible utilizar sus caracter�sticas de bajo
nivel para realizar implementaciones �ptimas.
Se dise�� como un lenguaje de programaci�n de sistemas port�til.
Es muy poco lo que requiere uso de ensamblador, lo que permiti� portar Unix y otros
sistemas operativos a distintos equipos.

Distingue entre may�sculas y min�sculas, pero conserva su portabilidad en equipos


que manejan caracteres de 6 bits, como las computadoras Cyber de CDC que ten�an una
palabra de 60 bits, (10 caracteres), porque usan trigr�ficos para codificar
s�mbolos especiales.
Su compilador de C se ha portado a casi todos los sistemas conocidos. Porque adem�s
de que no se requiere codificar en ensamblador, interact�a con los lenguajes
especializados YACC y LEX. tambi�n escritos en C como parte de Unix.
Facilita la programaci�n modular gracias a que cuenta con distintos tipos de
almacenamiento de las variables y compilaci�n separada. Adem�s del macro procesador
integrado cpp, que permite declarar los encabezados de las funciones y los tipos de
datos en archivos con extensi�n h. En el caso de las bibliotecas del sistema Unix y
de C se necesita incluir los prototipos con la macros #include por ejemplo #include
<system.h>. Ello �nicamente sirve para automatizar la declaraci�n de objetos
externos que se usar�n en el programa, por lo que es necesario pasar los nombres de
las bibliotecas como par�metros del compilador que este pasa al encadenador (linker
loader).
Precauciones que se debe tener por ser un lenguaje de bajo nivel
Los programadores novatos deben tener cuidado con la gesti�n de la memoria, en C el
programador ha de reservar y liberar la memoria expl�citamente. En otros lenguajes
(como BASIC o Matlab) la memoria es gestionada de forma transparente para el
programador. Esto alivia la carga de trabajo y evita errores, pero le quita
flexibilidad al lenguaje para escribir controladores del hardware.

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.

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. V�ase tambi�n la
librer�a GObject.
Funciones anidadas, aunque GCC tiene esta caracter�stica como extensi�n.
Soporte nativo para programaci�n multihilo. Disponible usando librer�as como
libpthread.
Aunque la lista de las caracter�sticas �tiles de las que carece C es larga, este
factor ha sido importante para su aceptaci�n, porque escribir r�pidamente nuevos
compiladores para nuevas plataformas, mantiene lo que realmente hace el programa
bajo el control directo del programador, y permite implementar la soluci�n m�s
natural para cada plataforma. �sta es la causa de que a menudo C sea m�s eficiente
que otros lenguajes. T�picamente, s�lo la programaci�n cuidadosa en lenguaje
ensamblador produce un c�digo m�s r�pido, pues da control total sobre la m�quina,
aunque los avances en los compiladores de C y la complejidad creciente de los
microprocesadores modernos han reducido gradualmente esta diferencia.

El lenguaje se puede extender mediante bibliotecas y macros. Por ejemplo, la


implementaci�n original de C++ consist�a en un preprocesador que traduc�a c�digo
fuente C++ a C.

Historia
Desarrollo inicial

Ken Thompson (izquierda) con Dennis Ritchie (derecha, el inventor del lenguaje de
programaci�n C)
El desarrollo inicial de C se llev� a cabo en los Laboratorios Bell de AT&T entre
1969 y 1973; seg�n Dennis Ritchie, el periodo m�s creativo tuvo lugar en 1972.1? Se
le dio el nombre "C" porque muchas de sus caracter�sticas fueron tomadas de un
lenguaje anterior llamado "B".

Hay muchas leyendas acerca del origen de C y el sistema operativo con el que est�
�ntimamente relacionado, Unix. Algunas de ellas son:

El desarrollo de C fue el resultado del deseo de los programadores de jugar con


Space Travel. Hab�an estado jugando en el mainframe de su compa��a, pero debido a
su poca capacidad de proceso y al tener que soportar 100 usuarios, Ken Thompson y
Dennis 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.1? Este 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.2?:2 El lenguaje descrito en este libro
recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o simplemente "K&R
C" (La segunda edici�n del libro cubre el est�ndar ANSI C, descrito m�s abajo).

Kernighan y Ritchie introdujeron las siguientes caracter�sticas al lenguaje:

El tipo de datos struct.


El tipo de datos long int.
El tipo de datos unsigned int.
Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambig�edad
sint�ctica de expresiones como i=-10, que se podr�a interpretar bien como i =- 10 o
bien como i = -10.
El C de Kernighan y Ritchie es el subconjunto m�s b�sico del lenguaje que un
compilador debe de soportar. Durante muchos a�os, incluso tras la introducci�n del
ANSI C, fue considerado "el m�nimo com�n denominador" en el que los programadores
deb�an programar cuando deseaban que sus programas fueran transportables, pues no
todos los compiladores soportaban completamente ANSI, y el c�digo razonablemente
bien escrito en K&R C es tambi�n c�digo ANSI C v�lido.

En las primeras versiones del lenguaje, la definici�n de funciones se hac�a


mediante un 'prototipo de funci�n' (function prototype), 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":

int power(); /* Se podr�a usar este prototipo


para llamar a la funci�n.
Simplemente power();
u omitirlo dado que el tipo
por default es int */

power(a,b)
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) {


for (int 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
int power(); 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
Art�culo principal: ANSI 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, Bjarne Stroustrup 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 que C 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 (ANSI) 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)
int argc;
char **argv;
{
...
}
pas� a ser:

int main(int argc, 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__
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 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 <conio.h>
#include <ctype.h>
#include <stdio.h>

int main() {
char numero;
fputs("Introduzca un numero entero par: ", stdout);

scanf("%c", &numero);
if (!isdigit(numero)) {
fputs("Error: numero no valido.\n", stderr);
return -1;
}

for (int i = 1; numero % 2 == 0; ++i) {


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);


getch();

return 0;
}
Palabras reservadas de ANSI-C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
C99
Commons-emblem-issue.svg
En esta secci�n se detect� el siguiente problema, para mejorarla, pulsa [editar]
junto a su t�tulo:
Podr�a contener informaci�n desactualizada.
Estas deficiencias fueron encontradas el 7 de mayo de 2019.
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.5?
Este est�ndar se denomina habitualmente "C99". Se adopt� como est�ndar ANSI en
marzo de 2000.

Las nuevas caracter�sticas de C99 incluyen:6?:xi-xii

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 long long int (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++."7?
C11
C11 (antes conocido como C1X) es un nombre informal para ISO/IEC 9899:20118?. El
borrador final, N1570, fue publicado en abril de 2011.9? 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.

C embebido
Hist�ricamente la programaci�n en C embebido ha requerido extensiones no est�ndar
del lenguaje C para implementar caracter�sticas no oficiales tales como aritm�tica
de punto fijo y operaciones b�sicas de entrada y salida.

En 2008 el comit� de estandarizaci�n de C, para implementar estas caracter�sticas


no oficiales, public� un informe t�cnico en el que extend�a el lenguaje C
proporcionando un est�ndar com�n al que todas las implementaciones se pod�an
adherir. Inclu�a varias caracter�sticas no disponibles en C normal, tales como
aritm�tica de punto fijo, espacios de direcciones con nombres y direccionamiento
por hardware de entrada y salida b�sico.

C18
El �ltimo est�ndar publicado para C ISO/IEC 9899:201810?.
Lenguajes derivados de C
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, pero actualmente usado en Mac OS X, iOS y GNUstep.
C++ (pronunciado C Plus Plus) dise�ado por Bjarne Stroustrup 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:

Preprocesado consistente en modificar el c�digo fuente en C seg�n una serie de


instrucciones (denominadas directivas de preprocesado) simplificando de esta forma
el trabajo del compilador. 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.
Compilaci�n que genera el c�digo objeto a partir del c�digo ya preprocesado.
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("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 impl�cito */


{
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 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: automatizador del proceso de compilaci�n y enlazado;


lint: detector de c�digo sospechoso, confuso o incompatible entre distintas
arquitecturas;
valgrind: detector de posibles fugas de memoria;
gdb: depurador (debugger) usado en GNU;
dbx: depurador preinstalado en Unix;
ddd: interfaz gr�fico para los depuradores 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 y simuladores), 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 a simulaci�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[cita requerida].

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 varias configuraciones 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 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
genera c�digo objeto r�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.

V�ase tambi�n
Anexo:Operadores de C y C++
C++
Referencias
Ritchie, Dennis (1993). �The Development of the C Language�. ACM SIGPLAN Notices
(en ingl�s) (ACM Press) 28 (3): 201-208. doi:10.1145/155360.155580. Consultado el
10 de marzo de 2019.
Kernighan, Brian W.; Ritchie, Dennis M. (1991). El lenguaje de programaci�n C (2�
edici�n). Prentice Hall Hispanoamericana. ISBN 968-880-205-0.
Raymond, Eric S. (2003). The Art of Unix Programming (en ingl�s). Addison-Wesley.
ISBN 0-13-142901-9.
Raymond, Eric S. (2003). �Evolution of C�. The Art of Unix Programming (en
ingl�s). Consultado el 7 de mayo de 2019.
�ISO/IEC 9899:1999�. International Organization for Standardization (en ingl�s).
Consultado el 10 de marzo de 2019.
�WG14/N1256 Committee Draft � Septermber 7, 2007 ISO/IEC 9899:TC3� (PDF).
International Organization for Standardization (en ingl�s). 7 de septiembre de
2007. Consultado el 7 de mayo de 2019.
�Content not found�. Consultado el 2009.
�ISO/IEC 9899:2011�. International Organization for Standardization (en ingl�s).
Consultado el 10 de marzo de 2019.
�N1570 Committee Draft � April 12, 2011 ISO/IEC 9899:201x� (PDF). International
Organization for Standardization (en ingl�s). 12 de abril de 2011. Consultado el 7
de mayo de 2019.
14:00-17:00. �ISO/IEC 9899:2018�. ISO (en ingl�s). Consultado el 18 de mayo de
2019.
Enlaces externos
Wikiversidad alberga proyectos de aprendizaje sobre C (lenguaje de programaci�n).
Wikilibros alberga un libro o manual sobre Programaci�n en C.
P�gina web oficial del est�ndar ISO/IEC 9899 - lenguaje de programaci�n C
P�gina web oficial del grupo de trabajo de ISO/IEC JTC1/SC22/WG14 encargado de la
estandarizaci�n del lenguaje de programaci�n C

También podría gustarte