El C es un lenguaje versátil, potente y muy velóz. No es caualidad que sea el lenguaje de programación más usado y probado de la historia. Grandes programas que han funcionado correctamente durante años han sido creados en este lenguaje. Por poner algunos buenos ejemplos, el núcleo de Linux y el núcleo de Windows estás escritos en C.
Antes de comenzar a describir el código de los programas descritos en esta práctica vamos a dar unas nociones muy básicas de cómo se puede escribir un programa escrito en el lenguaje de programación C. Usaremos este lenguaje por los siguientes motivos: (1) es muy eficiente tanto en términos de memoria como de CPU, (2) es el lenguaje de programación básico en los sistemas Unix (y por supuesto en Linux) y (3) es muy fácil programar los problemas que vamos a resolver en esta práctica, como vamos a ver.
Un programa escrito en C es una colección de funciones que se llaman entre sí. Cuando desde el shell ejecutamos el programa compilado, la ejecución comienza por la función llamada main. El resto de funciones pueden tener cualquier otro nombre. Para que el compilador pueda hacer la comprobación de los parámetros de las funciones, éstas deberían ser declaradas antes de su uso (aunque esto no es obligatorio). A continuación se presenta la escructura general de un programa en C:
/* Directivas de inclusión de los ficheros .h (ficheros cabecera). */
/* Directivas de declaración de definiciones (constantes). */ /* Varibles globales. */ /* Funciones, que pueden encapsular a otras funciones. */ /* Función main(): */ int main(int argc, char *argv[]) { /* Sólo existe una función main(). */ /* Llamadas a otras funciones. */ } |
Los programas manipulan datos simples y estructuras de datos compuestas por datos simples y otras estructuras de datos. Estos pueden declararse de forma global o pasarse como parámetros a las funciones. Cualquier ”dato” debe ser declarado antes de ser usado.
En C es muy frecuente incluir uno o más ficheros cabecera que declaran funciones y datos de alguna biblioteca (normalmente, de la bilbioteca estándar). Como ya hemos dicho, dicha inclusión es opcional (aunque conveniente) cuando invocamos a funciones de la biblioteca y obligatoria si hacemos uso de definiciones de tipos de datos, o datos, declarados en ella. Esta inclusión se hace mediante la directiva #include <fichero> del preprocesador de C. El preprocesador interpreta las directivas utilizadas antes de compilar realizando algunas de las funciones que realizaría un editor de ficheros ASCII. Todas las directivas comienzan por el símbolo #.
La compilación de un programa escrito en C genera un fichero binario que contiene instrucciones ejecutables por la CPU de la computadora (código nativo). La forma común de invocar al compilador de C en un sistema Unix es:
cc programa.c
|
Este comando generará un fichero ejecutable llamado a.out. Si queremos dar otro nombre diferente (por ejemplo, programa) a este fichero escribieremos:
cc programa.c -o programa
|
Para ejecutar el fichero programa hay que escribir:
./programa
|
o simplemente
programa
|
si el directorio actual (en el que se encuentra almacenado programa) está incluido en la lista de directorios de la variable del shell PATH. Podemos conocer el valor de esta variable escribiendo:
echo $PATH
|