Curso de GNU-C: El primer programa.
[Se supone que llegará un día en el que tendremos unos formatos fijos. Por favor, todo tipo de dudas o errores o imprecisiones o lo que sea, hacedlo saber]
Bien, ha llegado el momento de hacer nuestro primer programa. Tradicionalmente, dicho programa consiste en imprimir algo como "¡Hola, mundo!" pero bueno, tendré un detalle con mi novia, que se lo merece. Por supuesto, cada uno es libre de poner el texto que quiera en su prueba, como diría un profesor que se precie, "sin perdida de generalidad". He aquí nuestro primer programa:
#include <stdio.h>
int main(void) {
printf("¡Hola, Clara!\n"); /* Imprimamos el mensaje */
}
Este texto se graba con un nombre, por ejemplo 1.c y, a continuación, efectuamos la compilación:
% gcc -v 1.c -o 1
Si todo ha ido bien -si no hay errores- tendremos un fichero en nuestro directorio denominado 1. Si hacemos
% 1
¡Hola, Clara!
Bien, el primer programa ya está hecho. Pasemos a la explicación:
En C la unidad básica es la función. Una función es un conjunto de instrucciones que realiza una función :-) determinada. Las funciones pueden tener parámetros de entrada y parámetros de salida. Es decir, si codificamos una función para calcular el cuadrado de un número, una posible asignación será tener un parámetro de entrada (el número) y un valor de salida (el cuadrado del número). Las funciones llevan el (o los) parámetro(s) de entrada entre paréntesis a continuación del nombre de la función. Por ejemplo, con:
numero=Cuadrado(2);
estaríamos metiendo en la variable numero el valor correspondiente al cuadrado de 2 (siempre que la función Cuadrado estuviera ya escrita, lógicamente).
Podemos observar que en nuestro programa aparecen, al menos, dos funciones: main y printf. La función main es necesaria en todo programa C, y es la primera a la que se llama a la hora de la ejecución. Me parece que son necesarias unas palabras más sobre funciones:
- Cómo se utiliza una función:
Esto ya lo hemos comentado, para utilizar una función es necesario llamarla respetando sus parámetros.
numero = Cuadrado(2); /* OK */
Lo siguiente provocaría errores de compilación:
numero=Cuadrado(); /* Error: sin argumentos */
numero=Cuadrado(23,89); /* Error: dos argumentos */
numero=Cuadrado("hola"); /* Error: argumento no entero */
- Cómo se define una función:
Definir una función es escribir el código que ha de ejecutarse cuando se llama a la función:
int Cuadrado (int a)
{
return (a*a);
}
Con la primera línea especificamos que el parámetro de entrada es un entero (int) y que será asignado a la variable a dentro de la función. El primer int (anterior a Cuadrado) indica que la función devuelve un entero. La "devolución" se realiza con la única línea de la función.
- Cómo se declara una función:
El compilador ha de saber al menos la "forma" de la función, para poder codificar las llamadas a la misma (obviamente, para que el conjunto global funcione, no basta con el continente, sino que se necesita el contenido). La forma de especificar esa "forma" es mediante la declaración de la función:
int Cuadrado(int);
Ahora sí podremos explicar, línea a línea, nuestro querido primer programa:
#include <stdio.h>
La sentencia #include equivale a situar el código ubicado en el fichero que lo sigue en nuestro programa. Así pues, estamos "escribiendo" el contenido del fichero stdio.h en nuestro programa. Pero, ¿qué tiene ese fichero de interesante para nosotros?. En un par de líneas nos enteraremos.
int main (void) {
Como ya sabemos, estamos definiendo la función main. Especificamos que no hay parámetros de entrada (void) y que el valor de retorno será un int. Realmente podríamos haber forzado a que el valor de retorno sea un void también, pero es conveniente dejarlo así por si nos interesara devolver algún código de error desde nuestro programa.
printf("¡Hola, Clara\n");
Aquí estamos realizando una llamada a la función printf, función a la que le pasamos un único parámetro, que es una cadena de texto: "¡Hola, Clara!\n". El carácter especial \n simplemente indica el avance de línea. No es algo que interese en este momento. Pero, ¿cómo sabe nuestro compilador la "forma" de la función?. No cuesta mucho adivinarlo: se encuentra en el fichero stdio.h, donde se encuentran también declaraciones de otras muchas funciones. Podemos echarle un vistazo en el directorio /usr/include.
Pero, ¿y el código de dicha función?. Se encuentra en una librería (conjunto de funciones) que el compilador utiliza para poder conseguir el programa final.
En resumen, todo programa ha de comenzar con las declaraciones de las funciones que vamos a utilizar, por medio de #include. Si los ficheros de inclusión (ficheros .h) se encuentran en el directorio /usr/include, han de ponerse entre signos de mayor y menor. Si los ficheros est´n en otro directorio, utilizaremos las comillas dobles.
Obligatoriamente hemos de tener una función main, y el cuerpo de dicha función, como el de todas las funciones, irá entre llaves. Finalmente, decir que podemos poner todos los comentarios que queramos, utilizando los delimitadores de comentario (/* ... */).
Carlos Costa Portela