fbpx
Wikipedia

C (lenguaje de programación)

C es un lenguaje de programación de propósito general[2]: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]:1[3][4]

C


Código simple en C]
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)
Última versión en pruebas C2x
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, Rust, Python
Sistema operativo Multiplataforma

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 softwares de sistemas y aplicaciones.

Se trata de un lenguaje de tipos de datos estáticos, débilmente tipado, de medio nivel, 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 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.

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.

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

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.

  • 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

Desarrollo inicial

 
Dennis Ritchie (derecha), el inventor del lenguaje de programación C, con Ken Thompson

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

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

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 solo tras otra declaración o al comienzo de una declaración compuesta.
  • Muchos tipos de datos, incluyendo long int (para reducir el engorro de la transición de 32 bits a 64 bits), un tipo de dato 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.

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:2011[8]​. 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:2018.[10]

Lenguajes derivados de C

Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:

También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:

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:

  1. 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.
  2. Compilación que genera el código objeto a partir del código ya preprocesado.
  3. Enlazado que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) con el código objeto generado en el paso anterior 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.

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

Referencias

  1. 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. 
  2. Kernighan, Brian W.; Ritchie, Dennis M. (1991). El lenguaje de programación C (2ª edición). Prentice Hall Hispanoamericana. ISBN 968-880-205-0. 
  3. Raymond, Eric S. (2003). The Art of Unix Programming (en inglés). Addison-Wesley. ISBN 0-13-142901-9. 
  4. Raymond, Eric S. (2003). «Evolution of C». The Art of Unix Programming (en inglés). Consultado el 7 de mayo de 2019. 
  5. «ISO/IEC 9899:1999». International Organization for Standardization (en inglés). Consultado el 10 de marzo de 2019. 
  6. «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. 
  7. «Content not found». Consultado el 2009. 
  8. «ISO/IEC 9899:2011». International Organization for Standardization (en inglés). Consultado el 10 de marzo de 2019. 
  9. «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. 
  10. 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
  •   Datos: Q15777
  •   Multimedia: C (programming language)
  •   Libros y manuales: Programación en C
  •   Recursos didácticos: Programación en C

lenguaje, programación, este, artículo, detectaron, varios, problemas, favor, edítalo, para, mejorarlo, necesita, referencias, adicionales, para, verificación, existen, dudas, desacuerdos, sobre, exactitud, redacción, favor, debate, este, problema, página, dis. En este articulo se detectaron varios problemas Por favor editalo para mejorarlo Necesita referencias adicionales para su verificacion Existen dudas o desacuerdos sobre la exactitud de su redaccion Por favor debate este problema en la pagina de discusion Podria contener informacion desactualizada Podria ser dificil de entender para lectores interesados en el tema Este aviso fue puesto el 4 de mayo de 2019 C es un lenguaje de programacion de proposito general 2 1 originalmente desarrollado por Dennis Ritchie entre 1969 y 1972 en los Laboratorios Bell 1 como evolucion del anterior lenguaje B a su vez basado en BCPL 2 1 3 4 CCodigo simple en C Desarrollador es Dennis Ritchie y Laboratorios BellInformacion generalExtensiones comunes c hParadigmaImperativo procedural estructuradoAparecio en1972Disenado porDennis RitchieUltima version estableC18 junio de 2018 Ultima version en pruebasC2xSistema de tiposDebil estaticoImplementacionesGCC Intel C entre muchas mas DialectosCyclone Unified Parallel C Split C Cilk C Influido porB BCPL CPL ALGOL 68 1 201 208 Ensamblador PL I FortranHa influido aVala C Objective C C AWK bc Java JavaScript PHP Perl NXC D Go Rust PythonSistema operativoMultiplataforma editar datos en Wikidata Al igual que B es un lenguaje orientado a la implementacion de sistemas operativos concretamente Unix C es apreciado por la eficiencia del codigo que produce y es el lenguaje de programacion mas popular para crear softwares de sistemas y aplicaciones Se trata de un lenguaje de tipos de datos estaticos debilmente tipado de medio nivel que dispone de las estructuras tipicas de los lenguajes de alto nivel pero a su vez dispone de construcciones del lenguaje que permiten un control a bajo nivel Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar codigo en ensamblador con codigo C o acceder directamente a memoria o dispositivos perifericos La primera estandarizacion del lenguaje C fue en ANSI con el estandar X3 159 1989 El lenguaje que define este estandar fue conocido vulgarmente como ANSI C Posteriormente en 1990 fue ratificado como estandar ISO ISO IEC 9899 1990 La adopcion de este estandar es muy amplia por lo que si los programas creados lo siguen el codigo es portable entre plataformas y o arquitecturas Indice 1 Filosofia 1 1 Propiedades 1 2 Precauciones que se debe tener por ser un lenguaje de bajo nivel 2 Historia 2 1 Desarrollo inicial 2 2 El C de Kernighan y Ritchie 2 3 ANSI C e ISO C 2 3 1 Palabras reservadas de ANSI C 2 4 C99 2 5 C11 2 6 C embebido 2 7 C18 3 Lenguajes derivados de C 4 Proceso de compilacion 4 1 Ejemplo de codigo 5 Herramientas de programacion 6 Aplicabilidad 6 1 Aplicaciones embebidas 7 Bibliotecas C 8 Vease tambien 9 Referencias 10 Enlaces externosFilosofia EditarUno de los objetivos de diseno del lenguaje C es que solo sean necesarias unas pocas instrucciones en lenguaje maquina para traducir cada elemento del lenguaje sin que haga falta un soporte intenso en tiempo de ejecucion Es muy posible escribir C a bajo nivel de abstraccion de hecho C se uso como intermediario entre diferentes lenguajes En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de caracteristicas se pueden desarrollar compiladores de C facilmente En consecuencia el lenguaje C esta disponible en un amplio abanico de plataformas mas que cualquier otro lenguaje Ademas a pesar de su naturaleza de bajo nivel el lenguaje se desarrollo para incentivar la programacion independiente de la maquina Un programa escrito cumpliendo los estandares e intentando que sea portatil puede compilarse en muchos computadores C se desarrollo 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 programacion de software de sistema para la que se diseno originalmente Propiedades Editar Nucleo del lenguaje simple con funcionalidades anadidas importantes como funciones matematicas y de gestion 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 atomicos tipicos y mediante arreglos estructuras uniones y punteros incluidos los que apuntan a una funcion En su primera edicion no habia advertencias sobre asignar a una variable un valor un tipo distinto Por lo que habia 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 multiples archivos de codigo 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 diseno 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 tambien llamados registros Y la union disyunta tambien llamada suma co producto o tipos variantes se declara con la palabra clave union Las estructuras y uniones permiten la implementacion de arboles Lenguaje muy eficiente puesto que es posible utilizar sus caracteristicas de bajo nivel para realizar implementaciones optimas Se diseno como un lenguaje de programacion de sistemas portatil Es muy poco lo que requiere uso de ensamblador lo que permitio portar Unix y otros sistemas operativos a distintos equipos Distingue entre mayusculas y minusculas pero conserva su portabilidad en equipos que manejan caracteres de 6 bits como las computadoras Cyber de CDC que tenian una palabra de 60 bits 10 caracteres porque usan trigraficos para codificar simbolos especiales Su compilador de C se ha portado a casi todos los sistemas conocidos Porque ademas de que no se requiere codificar en ensamblador interactua con los lenguajes especializados YACC y LEX tambien escritos en C como parte de Unix Facilita la programacion modular gracias a que cuenta con distintos tipos de almacenamiento de las variables y compilacion separada Ademas del macro procesador integrado cpp que permite declarar los encabezados de las funciones y los tipos de datos en archivos con extension 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 lt system h gt Ello unicamente sirve para automatizar la declaracion de objetos externos que se usaran en el programa por lo que es necesario pasar los nombres de las bibliotecas como parametros 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 gestion de la memoria en C el programador ha de reservar y liberar la memoria explicitamente 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 razon es muy importante que los recien iniciados adopten buenas practicas a la hora de escribir en C y manejar la memoria como por ejemplo un uso intensivo de indentacion y conocer a fondo todo lo que implica el manejo de punteros y direcciones de memoria Recoleccion 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 programacion orientada a objetos aunque la implementacion original de C fue un preprocesador que traducia codigo fuente de C a C Vease tambien la libreria GObject Funciones anidadas aunque GCC tiene esta caracteristica como extension Soporte nativo para programacion multihilo Disponible usando librerias como libpthread Aunque la lista de las caracteristicas utiles de las que carece C es larga este factor ha sido importante para su aceptacion porque escribir rapidamente nuevos compiladores para nuevas plataformas mantiene lo que realmente hace el programa bajo el control directo del programador y permite implementar la solucion mas natural para cada plataforma Esta es la causa de que a menudo C sea mas eficiente que otros lenguajes Tipicamente solo la programacion cuidadosa en lenguaje ensamblador produce un codigo mas rapido pues da control total sobre la maquina 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 implementacion original de C consistia en un preprocesador que traducia codigo fuente C a C Historia EditarDesarrollo inicial Editar Dennis Ritchie derecha el inventor del lenguaje de programacion C con Ken Thompson El desarrollo inicial de C se llevo a cabo en los Laboratorios Bell de AT amp T entre 1969 y 1973 segun Dennis Ritchie el periodo mas creativo tuvo lugar en 1972 1 Se le dio el nombre C porque muchas de sus caracteristicas fueron tomadas de un lenguaje anterior llamado B Hay muchas leyendas acerca del origen de C y el sistema operativo con el que esta intimamente relacionado Unix Algunas de ellas son El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel Habian estado jugando en el mainframe de su compania pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios Ken Thompson y Dennis Ritchie no tenian 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 maquina no tenia sistema operativo asi que decidieron escribir uno Finalmente decidieron portar el sistema operativo del PDP 11 que habia en su oficina pero era muy costoso pues todo el codigo estaba escrito en lenguaje ensamblador Entonces decidieron usar un lenguaje de alto nivel y portatil para que el sistema operativo se pudiera portar facilmente de un ordenador a otro consideraron usar B pero carecia de las funcionalidades necesarias para aprovechar algunas caracteristicas avanzadas del PDP 11 entonces empezaron a crear un nuevo lenguaje C La justificacion para obtener el ordenador original que se uso para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes La version original de Unix se desarrollo en lenguaje ensamblador Mas tarde el lenguaje C se desarrollo para poder reescribir el sistema operativo En 1973 el lenguaje C se habia vuelto tan potente que la mayor parte del kernel Unix originalmente escrito en el lenguaje ensamblador PDP 11 fue reescrita en C 1 Este fue uno de los primeros nucleos 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 Editar En 1978 Ritchie y Brian Kernighan publicaron la primera edicion de El lenguaje de programacion C tambien conocido como La biblia de C Este libro fue durante anos la especificacion 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 amp R C La segunda edicion del libro cubre el estandar ANSI C descrito mas abajo Kernighan y Ritchie introdujeron las siguientes caracteristicas 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 ambiguedad sintactica de expresiones como i 10 que se podria interpretar bien como i 10 o bien como i 10 El C de Kernighan y Ritchie es el subconjunto mas basico del lenguaje que un compilador debe de soportar Durante muchos anos incluso tras la introduccion del ANSI C fue considerado el minimo comun denominador en el que los programadores debian programar cuando deseaban que sus programas fueran transportables pues no todos los compiladores soportaban completamente ANSI y el codigo razonablemente bien escrito en K amp R C es tambien codigo ANSI C valido En las primeras versiones del lenguaje la definicion de funciones se hacia mediante un prototipo de funcion function prototype el cual indicaba al compilador el tipo de retorno de la funcion Aunque este metodo tiene una gran desventaja respecto al nuevo debido a que no comprueba el numero ni el tipo en la lista de argumentos en otras palabras es mucho mas facil cometer errores al hacer una llamada a una funcion con argumentos incorrectos Ejemplo del viejo estilo int power Se podria usar este prototipo para llamar a la funcion Simplemente power u omitirlo dado que el tipo por default es int power a b int a b int n for n 1 b gt 0 b n a return n Ejemplo de la nueva definicion int power int a int b for int n 1 b gt 0 b n a return n Por defecto el tipo de retorno en C es int por lo que la declaracion entera int power podria haberse omitido En los anos siguientes a la publicacion del C de Kernighan y Ritchie se anadieron al lenguaje muchas caracteristicas no oficiales que estaba soportadas por los compiladores de AT amp T entre otros Algunas de estas caracteristicas eran Funciones void y el tipo de datos void Funciones que retornaban tipos de datos struct o union en lugar de punteros Asignacion de tipos de datos struct Calificador const que hace que un objeto sea de solo lectura Una biblioteca estandar que incorporaba la mayoria de las funcionalidades implementadas por varios desarrolladores de compiladores Enumeraciones ANSI C e ISO C Editar Articulo principal ANSI C A finales de la decada de 1970 C empezo a sustituir a BASIC como lenguaje de programacion de microcomputadores predominante Durante la decada de 1980 se empezo a usar en los IBM PC lo que incremento su popularidad significativamente Al mismo tiempo Bjarne Stroustrup empezo a trabajar con algunos companeros de Bell Labs para anadir funcionalidades de programacion orientada a objetos a C El lenguaje que crearon llamado C es hoy en dia el lenguaje de programacion de aplicaciones mas comun en el sistema operativo Microsoft Windows mientras que C sigue siendo mas popular en el entorno Unix Otro lenguaje que se desarrollo en esa epoca Objective C tambien anadio caracteristicas de programacion orientada a objetos a C Aunque hoy en dia no es tan popular como C se usa para desarrollar aplicaciones Cocoa para Mac OS X En 1983 el Instituto Nacional Estadounidense de Estandares ANSI organizo un comite X3j11 para establecer una especificacion estandar de C Tras un proceso largo y arduo se completo el estandar en 1989 y se ratifico como el Lenguaje de Programacion C ANSI X3 159 1989 Esta version del lenguaje se conoce a menudo como ANSI C o a veces como C89 para distinguirla de C99 En 1990 el estandar ANSI con algunas modificaciones menores fue adoptado por la Organizacion Internacional para la Estandarizacion ISO en el estandar ISO IEC 9899 1990 Esta version 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 estandarizacion del ANSI C fue producir una extension al C de Kernighan y Ritchie incorporando muchas funcionalidades no oficiales Sin embargo el comite de estandarizacion incluyo tambien muchas funcionalidades nuevas como prototipos de funcion y un preprocesador mejorado Tambien se cambio la sintaxis de la declaracion de parametros para hacerla semejante a la empleada habitualmente en C main argc argv int argc char argv paso a ser int main int argc char argv ANSI C esta soportado hoy en dia por casi la totalidad de los compiladores La mayoria del codigo C que se escribe actualmente esta basado en ANSI C Cualquier programa escrito solo en C estandar sin codigo que dependa de un hardware determinado funciona correctamente en cualquier plataforma que disponga de una implementacion de C compatible Sin embargo muchos programas han sido escritos de forma que solo pueden compilarse en una cierta plataforma o con un compilador concreto esto puede ser debido a diversos motivos La utilizacion de bibliotecas no estandar como interfaces graficas de usuario El uso de compiladores que no cumplen las especificaciones del estandar El uso de tipos de datos suponiendo que tendran el mismo tamano u orden de los bits en todas las plataformas La macro STDC puede usarse para dividir el codigo en secciones ANSI y K amp 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 numero El programa dividira dicho numero entre 2 e imprimira el resultado mientras que este sea par y terminara cuando el numero sea impar include lt conio h gt include lt ctype h gt include lt stdio h gt int main char numero fputs Introduzca un numero entero par stdout scanf c amp 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 Editar 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 Editar En esta seccion se detecto el siguiente problema Para mejorarla pulsa editar junto a su titulo Podria contener informacion desactualizada Este aviso fue puesto el 7 de mayo de 2019 Tras el proceso de estandarizacion de ANSI la especificacion del lenguaje C permanecio relativamente estable durante algun tiempo mientras que C siguio evolucionando Sin embargo el estandar continuo bajo revision a finales de la decada de 1990 lo que llevo a la publicacion del estandar ISO 9899 1999 en 1999 5 Este estandar se denomina habitualmente C99 Se adopto como estandar ANSI en marzo de 2000 Las nuevas caracteristicas de C99 incluyen 6 xi xii Funciones inline Las variables pueden declararse en cualquier sitio como en C en lugar de poder declararse solo tras otra declaracion o al comienzo de una declaracion compuesta Muchos tipos de datos incluyendo long int para reducir el engorro de la transicion de 32 bits a 64 bits un tipo de dato booleano y un tipo complex que representa numeros complejos Arrays de longitud variable Soporte para comentarios de una linea que empiecen con como en BCPL o en C caracteristica para la que muchos compiladores habian dado soporte por su cuenta Muchas funciones nuevas como snprintf Algunos headers nuevos como stdint h El compilador GCC entre muchos otros soportan hoy en dia la mayoria de las nuevas caracteristicas de C99 Sin embargo este nuevo estandar 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 caracteristicas de C99 Algunas caracteristicas tienen mas demanda que otras y consideraremos incluirlas en versiones futuras siempre que sean compatibles con C 7 C11 Editar C11 antes conocido como C1X es un nombre informal para ISO IEC 9899 2011 8 El borrador final N1570 fue publicado en abril de 2011 9 El nuevo estandar supero su ultima revision el 10 de octubre de 2011 y fue oficialmente ratificado por la ISO y publicado el 8 de diciembre de 2011 C embebido Editar Historicamente la programacion en C embebido ha requerido extensiones no estandar del lenguaje C para implementar caracteristicas no oficiales tales como aritmetica de punto fijo y operaciones basicas de entrada y salida En 2008 el comite de estandarizacion de C para implementar estas caracteristicas no oficiales publico un informe tecnico en el que extendia el lenguaje C proporcionando un estandar comun al que todas las implementaciones se podian adherir Incluia varias caracteristicas no disponibles en C normal tales como aritmetica de punto fijo espacios de direcciones con nombres y direccionamiento por hardware de entrada y salida basico C18 Editar El ultimo estandar publicado para C ISO IEC 9899 2018 10 Lenguajes derivados de C EditarDesde el inicio del lenguaje han surgido varias ramas de evolucion que han generado varios lenguajes Objective C es un primer intento de proporcionar soporte para la programacion orientada a objetos en C pero actualmente usado en Mac OS X iOS y GNUstep C pronunciado C Plus Plus disenado por Bjarne Stroustrup fue el segundo intento de proporcionar orientacion a objetos a C y es la variante mas difundida y aceptada Esta version combina la flexibilidad y el acceso de bajo nivel de C con las caracteristicas de la programacion orientada a objetos como abstraccion encapsulacion y ocultacion Tambien se han creado numerosos lenguajes inspirados en la sintaxis de C pero que no son compatibles con el Java que une una sintaxis inspirada en la del C con una orientacion a objetos mas similar a la de Smalltalk y Objective C JavaScript un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java disenado para dar a las paginas web mayor interactividad A la version estandarizada se la conoce como ECMAScript C pronunciado C Sharp es un lenguaje desarrollado por Microsoft derivado de C C y Java Proceso de compilacion EditarLa compilacion 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 codigo fuente en C segun una serie de instrucciones denominadas directivas de preprocesado simplificando de esta forma el trabajo del compilador Por ejemplo una de las acciones mas importantes es la modificacion de las inclusiones include por las declaraciones reales existentes en el archivo indicado Compilacion que genera el codigo objeto a partir del codigo ya preprocesado Enlazado que une los codigos objeto de los distintos modulos y bibliotecas externas como las bibliotecas del sistema con el codigo objeto generado en el paso anterior para generar el programa ejecutable final Ejemplo de codigo Editar El siguiente programa imprime en pantalla la frase Hola Mundo C99 necesario para utilizar printf include lt stdio h gt int main void printf Hola Mundo n return 0 El siguiente escribe Hola Mundo en C89 comentarios con no permitidos en C89 si en C99 include lt stdio h gt necesario para utilizar printf main tipo int de retorno implicito 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 programacion EditarAl programar en C es habitual usar algunas herramientas de programacion de uso muy extendido sobre todo en entorno de tipo Unix make automatizador del proceso de compilacion y enlazado lint detector de codigo 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 grafico para los depuradores gdb o dbx Aplicabilidad EditarHecho principalmente para la fluidez de programacion en sistemas Unix Se usa tambien para el desarrollo de otros sistemas operativos como Windows o GNU Linux Igualmente para aplicaciones de escritorio como GIMP cuyo principal lenguaje de programacion es C De la misma forma es muy usado en aplicaciones cientificas para experimentos informaticos fisicos quimicos matematicos entre otros parte de ellos conocidos como modelos y simuladores industriales industria robotica cibernetica sistemas de informacion y base de datos para la industria petrolera y petroquimica Predominan tambien todo lo que se refiere a simulacion de maquinas de manufactura simulaciones de vuelo es la mas 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 areas desconocidas por gran parte de los usuarios noveles Los ordenadores de finales de los 90 son varios ordenes de magnitud mas potentes que las maquinas en que C se desarrollo originalmente Programas escritos en lenguajes de tipo dinamico y facil codificacion Ruby Python Perl que antano hubieran resultado demasiado lentos son lo bastante rapidos como para desplazar en uso a C Aun asi se puede seguir encontrando codigo C en grandes desarrollos de animaciones modelados y escenas en 3D en peliculas y otras aplicaciones multimedia Actualmente los grandes proyectos de software se dividen en partes dentro de un equipo de desarrollo Aquellas partes que son mas burocraticas o de gestion con los recursos del sistema se suelen realizar en lenguajes de tipo dinamico o de guion script mientras que aquellas partes criticas por su necesidad de rapidez de ejecucion se realizan en un lenguaje de tipo compilado como C o C Si despues de hacer la division las partes criticas no superan un cierto porcentaje del total aproximadamente el 10 entonces todo el desarrollo se realiza con lenguajes dinamicos Si la parte critica no llega a cumplir las expectativas del proyecto se comparan las alternativas de una inversion en nuevo hardware frente a invertir en el coste de un programador para que reescriba dicha parte critica Aplicaciones embebidas Editar C es el lenguaje comun para programar sistemas embebidos cita requerida El codigo 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 caracteristica donde C demuestra comodidad de uso particularmente valiosa en sistemas embebidos es la manipulacion de bits Los sistemas contienen registros mapeados en memoria en ingles MMR a traves de los cuales los perifericos se configuran Estos registros mezclan varias configuraciones en la misma direccion de memoria aunque en bits distintos Con C es posible modificar facilmente uno de estos bits sin alterar el resto Por ejemplo int mmr puntero al registro que queremos modificar mmr 0x40008ABC direccion de memoria del registro mmr 1 lt lt 7 pone a 1 el bit 8 sin modificar los demas mmr amp 1 lt lt 12 pone a 0 el bit 13 sin modificar los demas Este tipo de manipulacion 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 estan disponibles en el lenguaje C Otras caracteristicas de C consideradas desventajas en la programacion para PC como la ausencia de control de memoria automatico se convierten en ventajas cuando los sistemas embebidos necesitan codigo pequeno 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 EditarUna biblioteca de C es una coleccion de funciones utilizadas en el lenguaje de programacion C Las bibliotecas mas comunes son la biblioteca estandar de C y la biblioteca del estandar ANSI C la cual provee las especificaciones de los estandares que son ampliamente compartidas entre bibliotecas La biblioteca ANSI C estandar incluye funciones para la entrada y salida de archivos alojamiento de memoria y operaciones con datos comunes funciones matematicas 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 nucleo Estas funciones son detalladas en varios estandares 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 codigo objeto rapido 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 Vease tambien EditarAnexo Operadores de C y C C Referencias Editar a b c d Ritchie Dennis 1993 The Development of the C Language ACM SIGPLAN Notices en ingles ACM Press 28 3 201 208 doi 10 1145 155360 155580 Consultado el 10 de marzo de 2019 a b c Kernighan Brian W Ritchie Dennis M 1991 El lenguaje de programacion C 2ª edicion Prentice Hall Hispanoamericana ISBN 968 880 205 0 Raymond Eric S 2003 The Art of Unix Programming en ingles Addison Wesley ISBN 0 13 142901 9 Raymond Eric S 2003 Evolution of C The Art of Unix Programming en ingles Consultado el 7 de mayo de 2019 ISO IEC 9899 1999 International Organization for Standardization en ingles Consultado el 10 de marzo de 2019 WG14 N1256 Committee Draft Septermber 7 2007 ISO IEC 9899 TC3 PDF International Organization for Standardization en ingles 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 ingles Consultado el 10 de marzo de 2019 N1570 Committee Draft April 12 2011 ISO IEC 9899 201x PDF International Organization for Standardization en ingles 12 de abril de 2011 Consultado el 7 de mayo de 2019 14 00 17 00 ISO IEC 9899 2018 ISO en ingles Consultado el 18 de mayo de 2019 Enlaces externos Editar Wikiversidad alberga proyectos de aprendizaje sobre C lenguaje de programacion Wikilibros alberga un libro o manual sobre Programacion en C Pagina web oficial del estandar ISO IEC 9899 lenguaje de programacion C Pagina web oficial del grupo de trabajo de ISO IEC JTC1 SC22 WG14 encargado de la estandarizacion del lenguaje de programacion C Datos Q15777 Multimedia C programming language Libros y manuales Programacion en C Recursos didacticos Programacion en CObtenido de https es wikipedia org w index php title C lenguaje de programacion amp oldid 138583658, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos