Lenguaje C 2
Lenguaje C 2
Lenguaje C 2
Ir a la navegaciónIr a la búsqueda
En este artículo se detectaron varios problemas. Por favor, edítalo para mejorarlo:
Código simple en C]
Desarrollador(es)
Información general
Extensiones .c, .h
comunes
Paradigma Imperativo (procedural), estructurado
Apareció en 1972
Última C2x
versión en
pruebas
Ensamblador, PL/I, Fortran
Ha influido a Vala, C#, Objective-C, C++, AWK, bc, Java, JavaScri
pt, PHP, Perl, NXC, D, Go, Rust, Python
Sistema Multiplataforma
operativo
Índice
1Filosofía
o 1.1Propiedades
o 1.2Precauciones que se debe tener por ser un lenguaje de bajo nivel
o 1.3Algunas características de las que carece C
2Historia
o 2.1Desarrollo inicial
o 2.2El C de Kernighan y Ritchie
o 2.3ANSI C e ISO C
2.3.1Palabras reservadas de ANSI-C
o 2.4C99
o 2.5C11
o 2.6C embebido
o 2.7C18
3Lenguajes derivados de C
4Proceso de compilación
o 4.1Ejemplo de código
5Herramientas de programación
6Aplicabilidad
o 6.1Aplicaciones embebidas
7Bibliotecas C
8Véase también
9Referencias
10Enlaces externos
Filosofía[editar]
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.
Propiedades[editar]
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 punteros, incluidos los que
apuntan a una 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 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 punteros 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[editar]
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 C# o Java) 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.
Algunas características de las que carece C[editar]
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. Esta es la causa de que a menudo C
sea más eficiente que otros lenguajes. Típicamente, solo 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[editar]
Desarrollo inicial[editar]