C ye un llinguaxe de programación de propósitu xeneral  orixinalmente desendolcáu por Dennis Ritchie ente 1969 y 1972 nos Llaboratorios Bell, como evolución del anterior llinguaxe B, de la mesma basáu en BCPL. 

Al igual que B, ye un llinguaxe orientáu a la implementación de sistemes operativos; concretamente Unix. C ye apreciáu pola eficiencia del códigu que produz y ye'l llinguaxe de programación más popular para crear software de sistemes y aplicaciones.

Trátase d'un llinguaxe con tipau de datos estático, débilmente tipau, que dispon de les estructures típiques de los llinguaxes d'altu nivel, pero, de la mesma, dispon de construcciones que dexen un control a baxu nivel, lo que conviértelo nun llinguaxe de nivel mediu. Los compiladores suelen ufiertar estensiones al llinguaxe que faen posible entemecer códigu n'ensamblador con códigu C o aportar direutamente a memoria o dispositivos periféricos.

La primera estandarización del llinguaxe C foi'l ANSI, col estándar X3.159-1989. El llinguaxe que define esti estándar foi conocíu vulgarmente como ANSI C. Darréu, en 1990, foi ratificáu como estándar ISO (ISO/IEC 9899:1990). L'adopción d'esti estándar ye bien amplia polo qu'un programa que siga esti estándar ye bien portable ente plataformes y/o arquitectures.

Filosofía Unu de los oxetivos de diseñu del llinguaxe C ye que solo sían necesaries poques instrucciones en llenguaxe máquina pa traducir cada elementu del llinguaxe, ensin que faiga falta un soporte intensu en tiempu d'execución. Ye bien posible escribir C a baxu nivel d'astraición, ello ye que C usóse como intermediariu ente distintos llinguaxes.

En parte, por causa de ser de relativamente de baxu nivel y de tener un modestu conxuntu de característiques, pueden desendolcarse compiladores de C fácilmente. Arriendes d'ello, el llinguaxe C ta disponible nun ampliu abanicu de plataformes (más que cualesquier otru llinguaxe). Amás, a pesar de la so naturaleza de nivel mediu, el llinguaxe desendolcose pa incentivar la programación independiente de la máquina. Un programa escritu cumpliendo los estándares ya intentando que sía portátil pue compilarse en munchos computadores.

C desendolcose orixinalmente (conxuntamente col sistema operativu Unix, col que tuvo acomuñáu munchu tiempu) por programadores y pa programadores. Sicasí, algamó una popularidá enorme, y usóse en contestos bien alloñaos de la programación de software de sistema, para la que se diseñó orixinalmente.

Propiedaes

Nucleu del llinguaxe simple, con funcionalidades añadíes importantes, como funciones matemátiques y de xestión d'archivos, apurríes por llibreríes. Ye un llinguaxe estructuráu; tien estructures de control y tipos de datos estructuraos definíos pol programador a partir de los tipos atómicos típicos y por aciu arreglos, estructures, uniones y punteros, incluyíos los qu'apunten a una función. Na so primer edición nun había alvertencies sobro asignar a una variable un valor d'un tipu distintu. Polo qu'había un programa llamáu lint que detectaba esti tipu d'erros. Anguaño los compiladores pueden detectar inconsistencies de tipos y otros erros. Usa un llinguaxe de preprocesado, el preprocesador de C, pa xeres como definir macros ya incluyir múltiples ficheros de códigu fonte. Accesu a memoria de baxu nivel por aciu l'usu de punteros. Manexu d'Interrupciones por aciu de la biblioteca signal.h. Un conxuntu amenorgáu de pallabres clave. El llamáu a funciones ye por valor. Anque pueden pasase punteros a variables para facer llamaos por referencia. Distintos tipos d'almacenamientu que dexen un diseñu modular. La palabra clave struct dexa encapsular variables y funciones. Llinguaxe bien eficiente, que fae posible utilizar les sos característiques de baxu nivel pa realizar implementaciones óptimas. Diseñóse como un llinguaxe de programación de sistemes portátil. Ye bien pocu lo que requier l'usu d'ensamblador, lo que dexó portar Unix y otros sistemes operativos a distintos equipos. Estrema ente mayúscules y minúscules, pero caltien la so portabilidad n'equipos que remanen calteres de 6 bits, como los ordenadores Cyber de CDC que teníen una palabra de 60 bits (10 calteres) porque usen gráficos para codificar símbolos especiales. El so compilador de C portóse a la mayoría de sistemes. Porque amás de que nun se requier codificar en ensamblador, interactúa colos llinguaxes especializaos YACC y Alex. tamién escritos en C como parte d'Unix. Facilita la programación modular gracies a que cunta con distintos tipos d'almacenamientu de les variables y compilación separada. Esto llógrase cola inclusión de ficherus cabecera .h por aciu de la directiva de preprocesador #include. extern sirve para declarar oxetos esternos que van usase nel programa pero que nun s'atopen nel ficheru del programa, polo que ye necesariu pasar los nomes de los ficheros como parámetros del enllazador.

Precuros Los programadores novatos tienen que tener curiáu cola xestión de la memoria. En C ,el programador hai d'acutar y lliberar la memoria explícitamente. N'otros llinguaxes (como C# o Java) la memoria ye xestionada de forma tresparente pal programador. Esto sollivia la carga de trabayu y evita erros, pero quíta-y flexibilidá al llinguaxe para escribir controladores del hardware.

Por esta razón ye bien importante que los principiantes adopten bones práctiques a l'hora d'escribir en C y remanar la memoria, como por casu un usu intensivu de indentación y conocer a xeitu tolo qu'implica el manexu de punteros y direiciones de memoria.

Delles característiques de les qu'escarez C

Recueya de basura nativa, sicasí atópense con esi envís biblioteques como la «libre» desenvuelta por Sun Microsystems, o el Pañador de basura de Boehm. Soporte para programación empobinada a oxetos

Anque la llista de les característiques útiles de les qu'escarez C ye llarga, esti factor foi importante para la so aceptación, porque escribir rápido nuevos compiladores para nueves plataformes, caltien lo que realmente fai'l programa sol control directu del programador, y dexa implementar la solución más natural para cada plataforma. Esta ye la causa de que de cutiu C seya más eficiente qu'otros llinguaxes. Típicamente, solo la programación cuidadosa en llinguaxe ensamblador produz un códigu más rápidu, pos da control total sobro la máquina, anque les meyores nos compiladores de C y la complexidá creciente de los microprocesadores modernos amenorgaron gradualmente esta diferencia.

El llinguaxe puede estendese por aciu de biblioteques y macros. Por casu, la implementación orixinal de C++ consistía nun preprocesador que traducía códigu fonte C++ a C.

Hestoria

Desendolque inicial miniaturadeimagen|Dennis Ritchie (derecha), l'inventor del llinguaxe de programación C, con Ken Thompson El desendolque inicial de C llevose a cabu nos Llaboratorios Bell de AT&T ente 1969 y 1973; según Dennis Ritchie, el periodu más creativu tuvo llugar en 1972. Dióse-y el nome «C» porque munches de les sos característiques fueron tomaes d'un llinguaxe anterior llamáu «B».

Hai munches lleendes avera del orixe de C y el sistema operativu col que ta íntimamente rellacionáu, Unix. Dalgunes d'elles son:

El desendolcu de C foi el resultáu del deséu de los programadores de xugar con Space Travel. Tuvieren xugando na unidá central de la so compañía, pero por cuenta de la so poca capacidá de procesu y al tener que soportar 100 usuarios, Ken Thompson y Dennis Ritchie nun teníen abondu control sobro la nave pa evitar choques colos asteroides, por esi motivu decidieron portar el xuegu a un PDP-7 de la oficina que nun s'utilizaba; pero esa máquina nun tenía sistema operativu, asina que decidieron escribir unu. Finalmente decidieron portar el sistema operativu del PDP-11 qu'había na so oficina, pero yera bien costosu, pos tol códigu taba escritu en llinguaxe ensamblador. Entós decidieron usar un llinguaxe d'altu nivel y portátil pa que'l sistema operativu pudiera portase fácilmente d'un ordenador a otru, consideraron usar B pero escarecía de les funcionalidades necesaries p'aprovechar delles característiques avanzaes del PDP-11, entós empezaron a crear un nuevu llinguaxe: C. La xustificación para llograr l'ordenador orixinal que s'usó para desenvolver Unix foi crear un sistema que automatizase l'archivu de patentes. La versión orixinal de Unix se desendolcó en llinguaxe ensamblador. Más tarde, el llinguaxe C desendolcose para poder reescribir esti sistema operativu.

En 1973, el llinguaxe C volviérase tan potente que la mayor parte del kernel Unix, orixinalmente escritu n'ensamblador, foi reescrita en C. Este foi unu de los primeros núcleos de sistema operativu implementaos nun llinguaxe distintu al ensamblador. Dellos casos anteriores son el sistema Multics, escritu en PL/I , y Master Control Program pal B5000 de Burroughs, escritu n'ALGOL en 1961.

El C de Kernighan y Ritchie En 1978, Ritchie y Brian Kernighan publicaron la primera edición d'El llinguaxe de programación C, tamién conocíu como «La biblia de C». Esti llibru foi mientres años la especificación informal del llinguaxe.  El llinguaxe descritu nesti llibru recibe davezu el nome del «C de Kernighan y Ritchie» o a cencielles «K&R C». La segunda edición del llibru cubre l'estándar ANSI C, descritu más palantre nesti artículu.

Kernighan y Ritchie introducieron les siguientes característiques al llinguaxe :

El tipu de datos struct. El tipu de datos long int. El tipu de datos unsigned int. Les operadores =+ y =- foron sustituyíos por += y -= pa desaniciar l'ambigüedá sintáctica d'espresiones como i=-10, que podría interpretase bien como i =- 10 o bien como i = -10.

El C de Kernighan y Ritchie ye el subconxuntu más básicu del llinguaxe qu'un compilador debe de soportar. Mientres munchos años, inclusive tres la introducción del ANSI C, foi consideráu «el mínimu común denominador» nel que los programadores teníen que programar cuando deseyaben que los sos programes fueren tresportables, pos non tolos compiladores soportaben dafechu ANSI, y el códigu razonablemente bien escritu en K&R C ye tamién códigu ANSI C válidu.

Nes primeres versiones del llinguaxe, la definición de funciones facíase por aciu d'un 'prototipu de función' (function prototype), qu'indicaba al compilador el tipu de torna de la función. Anque esti métodu tien una gran desventaxa respecto al nuevu, por cuenta de que nun comprueba el númberu nin el tipu na llista d'argumentos; n'otres palabres, ye muncho más fácil cometer erros al facer una llamada a una función con argumentos incorrectos.

Exemplu del «vieyu estilu»:int power();

power(a,b) int a, b; { int n; for (n = 2; b > 0; --b) n *= a; return n; }Exemplu de la nueva definición:int power(int a, int b) { for (int n = 1; b > 0; --b) n *= a;

return n; }Por defectu, el tipu de torna en C ye int, polo que la declaración entera int power(); podría omitise .

Nos años siguientes a la publicación del C de Kernighan y Ritchie, s'añadió al llinguaxe munches característiques non oficiales, que taben soportaes polos compiladores d'AT&T, ente otros. Dalgunes d'estes característiques yeren:

Funciones void y el tipo de datos void *. Funciones que retornaban tipos de datos struct o union (en llugar de punteros). Asignación de tipos de datos struct. Calificador const, que fai qu'un oxetu seya de solo llectura. Una biblioteca estándar, qu'incorporaba la mayoría de les funcionalidades implementadas por varios desendolcadores de compiladores. Enumeraciones.