Vous êtes sur la page 1sur 18

OBJETIVO

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.

EL LENGUAJE DE PROGRAMACIN C
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.

CARACTERSTICAS
Propiedades

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 pre procesado, 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

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.

BREVE HIATORIA DEL LENGUAJE EN C


Desarrollo inicial
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 PDP11/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
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 la especificacin 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
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
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
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

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

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
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
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
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
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.

Vous aimerez peut-être aussi