Ensayo Lenguaje C
Ensayo Lenguaje C
Ensayo Lenguaje C
: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?
�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.
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.
Puedes avisar al redactor principal pegando lo siguiente en su p�gina de discusi�n:
{{sust:Aviso PA|C (lenguaje de programaci�n)|noneutral|referencias}} ~~~~
Propiedades
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 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.
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.
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.
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. La limitaci�n de esto es que al no ser
nativamente orientado a objetos no permite a�adir polimorfismo a la encapsulaci�n,
donde una serie de clases superiores utilizan funcionalidad desconociendo las
clases inferiores que las implementan. Forzosamente, en alg�n punto de las clases
superiores habr� un if comprobando la pertenencia del objeto a distintas subclases,
impidiendo la abstracci�n de las clases superiores respecto a las inferiores.Al
igual que esto se le declaran las variables a cualquier operaci�n de 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 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).
power(a,b)
int a, b;
{
int n;
for (n = 1; b > 0; --b)
n *= a;
return n;
}
Ejemplo de la nueva definici�n:
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:
# 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.
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);
}