robot de la enciclopedia para niños

C (lenguaje de programación) para niños

Enciclopedia para niños
Datos para niños
C
The C Programming Language logo.svg
Código en lenguaje C.png

Código simple en C
Desarrollador(es)
Dennis Ritchie y Laboratorios Bell
https://www.iso.org/standard/74528.html, https://www.open-std.org/jtc1/sc22/wg14/ y https://www.iso.org/standard/82075.html
Información general
Extensiones comunes .c, .h
Paradigma Imperativo (procedural), estructurado
Apareció en 1972
Diseñado por Dennis Ritchie
Última versión estable C23 (2 de julio de 2023)
Ú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*, Holy C.
Influido por

B (BCPL, CPL), ALGOL 68,: 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

C es un lenguaje de programación muy importante. Fue creado por Dennis Ritchie entre 1969 y 1972 en los Laboratorios Bell. C surgió de un lenguaje anterior llamado B.

Este lenguaje es muy bueno para crear sistemas operativos y otros programas que controlan el ordenador. Por ejemplo, el sistema operativo Unix se hizo con C. C es popular porque los programas que se escriben con él funcionan muy rápido. Se usa mucho para hacer programas que manejan el sistema del ordenador y también para aplicaciones.

C es un lenguaje que te permite controlar el ordenador de cerca. Tiene herramientas para organizar el código, pero también te deja trabajar con la memoria y los dispositivos del ordenador de forma directa. Los programas que traducen el código de C (llamados compiladores) a menudo permiten mezclar C con un lenguaje más básico llamado ensamblador.

La primera vez que C tuvo un estándar oficial fue en 1989, por una organización llamada ANSI. Luego, en 1990, otra organización internacional, ISO, también lo adoptó. Esto significa que si escribes un programa en C siguiendo estas reglas, funcionará en muchos tipos diferentes de ordenadores.

¿Qué hace especial al lenguaje C?

Una de las ideas principales al crear C era que cada parte del lenguaje se pudiera traducir a pocas instrucciones que el ordenador entendiera. Esto hace que los programas en C sean muy eficientes. También es posible escribir código en C que esté muy cerca de cómo funciona el ordenador por dentro.

Como C es un lenguaje relativamente sencillo, es fácil crear programas que lo traduzcan (compiladores). Por eso, C se puede usar en muchísimos tipos de ordenadores, más que casi cualquier otro lenguaje. Aunque C te permite controlar el ordenador de cerca, también fue diseñado para que los programas funcionaran bien en diferentes máquinas. Si un programa en C sigue las reglas estándar, puede funcionar en muchos ordenadores distintos.

C fue creado por programadores para otros programadores, junto con el sistema operativo Unix. Pero se hizo tan popular que ahora se usa para muchas cosas, no solo para programas del sistema.

Características principales de C

  • Tiene un núcleo simple, pero puedes añadir funciones importantes (como matemáticas o para manejar archivos) usando bibliotecas (colecciones de código ya hecho).
  • Es un lenguaje estructurado, lo que significa que puedes organizar tu código de forma lógica.
  • Al principio, no avisaba si asignabas un valor de un tipo diferente a una variable. Ahora, los compiladores pueden detectar estos errores.
  • Usa un preprocesador para tareas como definir atajos (macros) o incluir otros archivos de código.
  • Permite acceder a la memoria del ordenador de forma directa usando punteros (que son como direcciones de memoria).
  • Tiene pocas palabras clave (palabras especiales que el lenguaje entiende).
  • Cuando llamas a una función, le pasas copias de los valores. Pero puedes usar punteros para que la función cambie los valores originales.
  • Permite organizar el código en módulos separados.
  • Es muy eficiente porque puedes usar sus características de bajo nivel para hacer programas muy rápidos.
  • Fue diseñado para que los programas del sistema se pudieran mover fácilmente entre diferentes ordenadores.
  • No necesita mucho código en lenguaje ensamblador, lo que ayudó a que sistemas como Unix funcionaran en muchos equipos.
  • Distingue entre mayúsculas y minúsculas en el código.
  • Su compilador funciona en la mayoría de los sistemas.
  • Facilita la programación modular, permitiendo dividir el programa en partes más pequeñas.

Consejos para programar en C

Los programadores que empiezan deben tener cuidado con cómo manejan la memoria del ordenador. En C, tú eres quien debe decir cuándo reservar y cuándo liberar espacio en la memoria. Otros lenguajes lo hacen automáticamente, lo que es más fácil, pero C te da más control.

Por eso, es muy importante que los nuevos programadores aprendan buenas prácticas al escribir en C. Deben usar la indentación (espacios para organizar el código) y entender muy bien cómo funcionan los punteros y las direcciones de memoria.

¿Qué le falta a C?

Aunque C es muy potente, no tiene algunas características que otros lenguajes sí tienen:

  • No limpia la memoria automáticamente (no tiene recolección de basura integrada). Pero hay bibliotecas que hacen esto.
  • No tiene soporte directo para la programación orientada a objetos (una forma de organizar el código con "objetos"). Sin embargo, lenguajes como C++ se basan en C para añadir esto.
  • No tiene soporte directo para hacer varias cosas a la vez (multihilo). Esto se hace con bibliotecas.

Aunque parezca que le faltan cosas, esto ha sido clave para su éxito. Permite crear compiladores rápidamente para nuevos ordenadores y le da al programador un control directo sobre lo que hace el programa. Por eso, C suele ser más eficiente que otros lenguajes. Solo programar directamente en lenguaje ensamblador puede ser más rápido, pero los compiladores de C han mejorado mucho.

C se puede ampliar usando bibliotecas y macros. Por ejemplo, C++ se creó al principio como un programa que traducía el código de C++ a C.

Historia del lenguaje C

Los inicios de C

Archivo:Ken n dennis
Dennis Ritchie (derecha), el creador del lenguaje de programación C, con Ken Thompson

C se desarrolló en los Laboratorios Bell de AT&T entre 1969 y 1973. Dennis Ritchie dice que el año más importante fue 1972. Se le llamó "C" porque muchas de sus ideas venían de un lenguaje anterior llamado "B".

Hay varias historias sobre cómo nació C y el sistema operativo Unix:

  • Se dice que los programadores querían jugar a un juego llamado "Space Travel". Lo jugaban en un ordenador grande de su empresa, pero era lento. Así que decidieron llevar el juego a un ordenador más pequeño que no se usaba. Pero ese ordenador no tenía sistema operativo, así que decidieron crear uno. Querían que fuera fácil de mover a otros ordenadores, así que pensaron en usar el lenguaje B. Pero B no tenía todo lo que necesitaban, así que crearon un nuevo lenguaje: C.
  • Otra historia dice que el ordenador donde se creó Unix se compró para organizar patentes. La primera versión de Unix se escribió en un lenguaje muy básico. Luego, se creó C para poder reescribir Unix y hacerlo más fácil de usar en diferentes máquinas.

En 1973, C ya era tan potente que la mayor parte del corazón de Unix, que al principio estaba en lenguaje ensamblador, se reescribió en C. Fue uno de los primeros sistemas operativos en escribirse en un lenguaje diferente al ensamblador.

El C de Kernighan y Ritchie

En 1978, Dennis Ritchie y Brian Kernighan publicaron el libro El lenguaje de programación C. Este libro fue la guía principal del lenguaje durante muchos años. El lenguaje que describe se conoce como "C de Kernighan y Ritchie" o "K&R C".

Kernighan y Ritchie añadieron estas características a C:

  • El tipo de datos `struct` (para agrupar datos).
  • Los tipos de datos `long int` y `unsigned int` (para números más grandes o solo positivos).
  • Cambiaron los operadores ` =+` y `=-` por `+=` y `-=` para evitar confusiones.

El K&R C es la base del lenguaje. Durante mucho tiempo, los programadores lo usaban para asegurarse de que sus programas funcionaran en cualquier compilador, incluso antes de que existiera un estándar oficial.

En las primeras versiones, las funciones se declaraban de una forma que no comprobaba si los argumentos eran correctos. Esto podía causar errores. Ahora, la forma de declarar funciones es más segura.

Ejemplo del "viejo estilo" de función:

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 = 2; 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;
}

Después de la publicación del K&R C, se añadieron muchas características no oficiales que los compiladores de AT&T soportaban:

  • Funciones `void` (que no devuelven nada) y el tipo `void *` (un puntero que puede apuntar a cualquier cosa).
  • Funciones que podían devolver tipos `struct` o `union`.
  • Asignación de tipos `struct`.
  • El calificador `const`, para hacer que algo sea de solo lectura.
  • Una biblioteca estándar con muchas funciones comunes.
  • Enumeraciones (listas de nombres para números).

Estándares ANSI C e ISO C

A finales de los años 70, C empezó a ser el lenguaje más usado para ordenadores pequeños. En los 80, se hizo muy popular con los IBM PC. Al mismo tiempo, Bjarne Stroustrup empezó a añadir ideas de programación orientada a objetos a C, creando C++. C++ es muy común hoy en día en sistemas como Microsoft Windows, mientras que C sigue siendo popular en el entorno Unix. Otro lenguaje, Objective-C, también añadió objetos a C y se usa en Mac OS X.

En 1983, una organización de Estados Unidos (ANSI) creó un comité para hacer un estándar oficial para C. Después de mucho trabajo, el estándar se completó en 1989 y se llamó ANSI C o C89.

En 1990, la Organización Internacional para la Estandarización (ISO) adoptó este estándar con pequeños cambios, llamándolo C90. C89 y C90 son casi lo mismo.

El objetivo del estándar ANSI C era añadir muchas de las características no oficiales que se habían usado. También incluyó cosas nuevas como los prototipos de función y un preprocesador mejorado. La forma de declarar los parámetros de las funciones también cambió para parecerse a C++.

Por ejemplo, esto:

main(argc, argv)
    int  argc;
    char **argv;
{
...
}

Pasó a ser:

int main(int argc, char *argv[]) {
...
}

Casi todos los compiladores de hoy en día soportan ANSI C. La mayoría del código C que se escribe ahora se basa en ANSI C. Si un programa está escrito solo en C estándar y no depende de un hardware específico, funcionará en cualquier ordenador que tenga un compilador de C compatible. Sin embargo, muchos programas se escriben para funcionar solo en una plataforma o con un compilador específico. Esto puede ser por usar bibliotecas no estándar, compiladores que no siguen las reglas o suponer que los datos tienen el mismo tamaño en todos los ordenadores.

Palabras reservadas de ANSI-C

Estas son palabras que C usa para sus propias instrucciones y no puedes usarlas para nombrar tus variables:

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: Una actualización importante

Después del estándar ANSI, C se mantuvo estable por un tiempo. Pero a finales de los 90, se revisó el estándar y se publicó ISO 9899:1999 en 1999, conocido como C99. Se adoptó como estándar ANSI en marzo de 2000.

Algunas novedades de C99 son:

  • Las variables se pueden declarar en cualquier parte del código (como en C++).
  • Nuevos tipos de datos, como `long int` (para números muy grandes), un tipo para valores verdadero/falso (booleano) y un tipo para números complejos.
  • Arrays (listas de datos) que pueden cambiar de tamaño.
  • Soporte para comentarios de una sola línea que empiezan con `//` (como en C++).
  • Muchas funciones nuevas, como `snprintf()`.
  • Nuevos archivos de cabecera (headers), como `stdint.h`.

Muchos compiladores, como GCC, ya soportan la mayoría de las características de C99. Sin embargo, algunas empresas de software no lo han adoptado completamente, prefiriendo centrarse en C++.

C11, C17 y C23: Las versiones más recientes

  • C11 (ISO/IEC 9899:2011) se publicó en 2011.
  • C17 (ISO/IEC 9899:2018), también conocido como C18, se publicó en 2018.
  • C23 (ISO/IEC 9899:2024) es el estándar más actual, publicado en 2024.

C para sistemas pequeños (embebidos)

Programar en C para sistemas embebidos (ordenadores pequeños dentro de otros dispositivos) a menudo necesitaba extensiones especiales. En 2008, el comité de C publicó un informe técnico para estandarizar estas características. Incluía cosas como aritmética de punto fijo y acceso directo a la entrada y salida de hardware.

Lenguajes que nacieron de C

Desde que C apareció, han surgido otros lenguajes basados en él:

  • Objective-C fue un primer intento de añadir la programación orientada a objetos a C. Se usa en sistemas como Mac OS X y iOS.
  • C++ (se pronuncia "C Plus Plus"), creado por Bjarne Stroustrup, fue el segundo intento de añadir orientación a objetos a C. Es la versión más popular y combina la flexibilidad de C con las características de los objetos.

También hay lenguajes que se inspiraron en la forma de escribir de C, pero no son compatibles directamente:

  • Java: Combina la sintaxis de C++ con una forma de objetos más parecida a otros lenguajes.
  • JavaScript: Un lenguaje para hacer las páginas web más interactivas, inspirado en Java y la sintaxis de C.
  • C# (se pronuncia "C Sharp"): Un lenguaje de Microsoft que viene de C/C++ y Java.

¿Cómo se convierte el código C en un programa?

Para que un programa en C funcione, pasa por varias etapas que normalmente se hacen automáticamente:

  1. Preprocesado: Se modifica el código C siguiendo unas instrucciones especiales. Por ejemplo, si incluyes un archivo (`#include`), el preprocesador pone el contenido de ese archivo en tu código.
  2. Compilación: El compilador toma el código ya preprocesado y lo convierte en código objeto, que es un lenguaje que el ordenador entiende mejor.
  3. Enlazado: Se unen los códigos objeto de tu programa con los de otras bibliotecas (código ya hecho) para crear el programa final que puedes ejecutar.

Ejemplos de código en C

Este programa simple imprime "Hola Mundo" en la pantalla (C99):

// necesario para utilizar printf()
# include <stdio.h>

int main(void) {
        printf("Hola Mundo\n");
        return 0;
}

Este programa muestra cómo usar punteros en C (que son como direcciones de memoria):

#include <stdio.h>

int main(){
        // Variable
        int numero = 99;

        // Puntero a variable (una variable que guarda una dirección)
        int *p;

        // Asignación de puntero: 'p' ahora guarda la dirección de 'numero'
        p = &numero;

        // Acceso al valor de la variable a la que apunta el puntero
        printf("Numero: %d\n",*p);

        // Acceso a la dirección que guarda el puntero
        printf("Direccion: %d\n",p);

        // Cambio de valor de la variable a la que apunta el puntero
        *p = 2;

        printf("Numero: %d\n",numero);

}

Este es el mismo programa "Hola Mundo" pero para el estándar 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;
}

Ejemplo de una estructura de control "else if" (si pasa esto, haz esto; si no, si pasa esto otro, haz esto otro):

if (condicion 1) {
    sentencia 1
} else if (condicion 2) {
    sentencia 2
} else if (condicion n) {
    sentencia n
} else {
    sentencias por defecto
}

Herramientas para programar en C

Cuando programas en C, es común usar algunas herramientas:

  • make: Ayuda a automatizar el proceso de convertir tu código en un programa.
  • lint: Detecta partes del código que podrían ser problemáticas o confusas.
  • valgrind: Ayuda a encontrar errores relacionados con el uso de la memoria.
  • gdb: Un programa para encontrar y corregir errores en tu código.
  • dbx: Otro programa para corregir errores, común en Unix.
  • ddd: Una interfaz gráfica para usar gdb o dbx.

¿Para qué se usa C?

Archivo:The C Programming Language
El lenguaje de programación C

C se creó principalmente para programar sistemas Unix. Pero también se usa para desarrollar otros sistemas operativos como Windows o GNU/Linux. Además, se usa para aplicaciones de escritorio, como GIMP (un programa de edición de imágenes).

También es muy usado en:

  • Aplicaciones científicas: Para experimentos, modelos de física, química, matemáticas y simuladores.
  • Industria: En robótica, sistemas de información y bases de datos para la industria petrolera. También en simulaciones de máquinas.
  • Simuladores de vuelo: Donde se necesitan muchos recursos del ordenador para simular vuelos reales.

Aunque los ordenadores de hoy son mucho más potentes que cuando se creó C, y otros lenguajes más fáciles de usar (como Ruby, Python, Perl) son ahora lo suficientemente rápidos, C sigue siendo importante. Todavía se usa en grandes proyectos de animaciones, modelado y escenas en 3D para películas y otras aplicaciones multimedia.

En los proyectos de software grandes, las partes que necesitan ser muy rápidas se suelen hacer en lenguajes como C o C++. Si la parte crítica no cumple las expectativas, se compara si es mejor comprar hardware nuevo o pagar a un programador para que reescriba esa parte en C.

C en sistemas embebidos

C es el lenguaje más común para programar sistemas embebidos (ordenadores pequeños dentro de otros dispositivos). El código ligero que genera un compilador de C y su capacidad para acceder al hardware directamente lo hacen muy popular en estas aplicaciones.

Una característica de C muy útil en sistemas embebidos es la manipulación de bits. Los sistemas tienen registros de memoria que controlan los periféricos. Estos registros mezclan varias configuraciones en la misma dirección de memoria, pero en bits diferentes. Con C, puedes cambiar fácilmente uno de estos bits sin afectar los demás. 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 difícil o imposible en otros lenguajes de alto nivel, porque C permite usar operaciones a nivel de bit (como OR, AND) que son comunes en el lenguaje ensamblador.

Otras características de C que podrían ser desventajas en la programación para PC (como no tener control automático de memoria) se vuelven ventajas en sistemas embebidos. Esto es porque necesitan código pequeño y optimizado, como en microcontroladores de poca potencia.

Bibliotecas de C

Una biblioteca de C es una colección de funciones que puedes usar en tus programas. Las más comunes son la biblioteca estándar de C y la biblioteca del estándar ANSI C. Estas bibliotecas tienen funciones para leer y escribir archivos, manejar la memoria y hacer operaciones comunes como matemáticas, manejo de texto y fechas.

Otras bibliotecas de C se usan para desarrollar sistemas Unix. Estas bibliotecas permiten que los programas se comuniquen con el corazón del sistema operativo.

Como se han escrito muchos programas en C, hay una gran variedad de bibliotecas disponibles. Muchas se escriben en C porque C genera código muy rápido. Luego, los programadores crean formas de usar estas bibliotecas desde lenguajes de más alto nivel, como Java, Perl y Python.

|

Véase también

Kids robot.svg En inglés: C (programming language) Facts for Kids

kids search engine
C (lenguaje de programación) para Niños. Enciclopedia Kiddle.