Trátase dunha linguaxe non fortemente tipada de medio nivel pero con moitas características de baixo nivel. Dispón das estruturas típicas das linguaxes de alto nivel pero, á súa vez, dispón de construcións da linguaxe que permiten un control a moi baixo nivel. Un exemplo é a posibilidade de mesturar código en linguaxe ensambladora con código C ou acceder directamente a memoria o dispositivos periféricos. Destaca a súa grande riqueza de operadores e expresións.
Existe un estándar ISO do 1986 denominado ANSI C. En teoría, unha linguaxe 100% ANSI C sería portable entre plataformas e/ou arquitecturas pero na práctica isto non é sempre certo.
Vantaxes e inconvenientes
Vantaxes:
É unha linguaxe moi eficiente posto que é posible utilizar as súas características de baixo nivel para realizar implementacións óptimas.
A pesar do seu baixo nivel é portable sempre que no sistema final exista o compilador axeitado (con algunhas restricións).
É unha linguaxe moi flexible que permite programar con múltiples estilos. Un dos máis empregados é o estruturado non levado ao extremo (permitindo certas licenzas rupturistas).
Proporciona facilidades para realizar programas modulares e/uo utilizar código ou bibliotecas existentes.
Inconvenientes:
A súa flexibilidade e/ou optimización excesiva pode xerar programas pouco lexibles e mantibles.
Algunhas das súas posibilidades mal empregadas poden inducir a erros ou bugs difíciles de detectar e corrixir.
Trátase dunha linguaxe complexa e complicada de aprender. O seu núcleo nativo é moi reducido (unicamente expresións, sentenzas condicionais e bucles) mentres que a maior parte da funcionalidade proporcionase con bibliotecas externas (a maior parte bibliotecas estándar e as bibliotecas da API do sistema).
Variantes
Desde a súa aparición da linguaxe xurdiron varias ramas de evolución que xeraron varias novas linguaxes:
C++ deseñado por Bjarne Stroustrup proporciona orientación a obxectos e é a variante máis difundida e aceptada. Esta versión combina a flexibilidade e o acceso de baixo nivel de C coas características da programación orientada a obxectos como abstracción, encapsulación e ocultación.
C# (C Sharp en inglés) é unha linguaxe derivada de C/C++ e Java desenvolvido por Microsoft.
Proceso de compilación
A compilación dun programa C realizase en varias fases que normalmente son automatizadas e ocultadas polos contornos de desenvolvemento:
Preprocesado consistente en modificar o código fonte en C segundo unha serie de instrucións (denominadas directivas de preprocesado) simplificando desta forma o traballo do compilador. Por exemplo, unha das accións máis importantes é a modificación das inclusións (#include) polas declaracións reais existentes no ficheiro indicado.