El primer programa en C

Estructura de un programa en C.

Vamos a escribir nuestro primer programa en C y vamos a ver de qué se trata cada cosa.
Hay por lo menos dos maneras de escribir este programa:

Una:

#include<stdio.h>
main(){printf("\nHola mundo\n");return 0;}

o bien:

#include <stdio.h>
int main (void)
{
printf ("\nHola mundo.\n");
return 0;
}

Con las dos se consigue el mismo resultado.

#include

La directiva #include permite añadir el archivo de cabecera stdio.h (/usr/include/stdio.h) que incluirá funciones y datos necesarios para que el código se pueda compilar. En este caso lo necesitamos para que la función printf haga lo que deseamos. Esto es, imprimir en el dispositivo de salida estándar (la pantalla) lo que le indicamos (Hola mundo).

Las directivas son instrucciones al compilador para que haga algo antes de compilar el código. Le estamos indicando que sustituya #include "usr/include/stdio.h" por todo el código fuente contenido en ese archivo que es el que se encarga de proporcionar al compilador la información necesaria para manejar las funciones de biblioteca de entrada y salida estándar (escribir con el teclado y visualizar en la pantalla).

int main (void)

Es la función principal. La sintaxis es:

int: tipo de dato que devuelve (un número entero). Generalmente 2 o 4 bytes.

main: nombre de la función principal, sin ella no funciona ningún programa.

(void): Datos que espera la función para ejecutarse. En este caso la función no espera que se le pase ninguno. De hecho se puede escribir ().

{}

Las llaves delimitan bloques de código. Las sentencias a ejecutar por la función principal que abarca desde { hasta }

printf

Función definida en el archivo stdio.h y que se encarga de "sacar" por la salida estándar el "Hola mundo." del que estamos tratando.
La sintaxis es: printf("............");
Siempre abrimos y cerramos con paréntesis, encerramos el texto a imprimir en pantalla entre comillas y finalizamos la sentencia con ";". Aquí además hemos incluído "\n" antes y después del texto a imprimir. Esto es una "secuencia de escape" que sirve para incluir un salto de línea antes y después del texto a imprimir. Con esto se verá mejor y no se nos juntará con otras cosas que se impriman antes o después de ejecutar el programa.

return 0;

Nos indica que la ejecución del programa ha terminado con éxito y devuelve el control al sistema operativo. Recordaremos que hablábamos de que la función main devolvía un tipo de dato entero (int).

Compilación y ejecución.

Suponemos que tenemos instalado el compilador gcc y disponemos de la biblioteca de cabecera stdio.h en nuestro sistema.
Suponemos también que hemos guardado nuestro código fuente como hola.c.
Compilar es muy fácil: gcc hola.c
Probablemente nos saldrán algunos errores, un punto y coma que se nos ha olvidado, hemos escrito "prinf" en vez de "printf", hemos escrito "return0" todo junto...
Una vez solventados los errores de sintaxis podremos compilar y obtener un archivo a.out.

  • Preprocesador: Si ejecutamos cpp -E hola.c hola.cpp obtendremos un archivo hola.cpp en el que podremos ver que la directiva #include ha sido sustituída por el archivo /usr/include/stdio.h
  • Compilación: gcc -S hola.c Mágicamente nuestro código fuente se ha traducido a lenguaje ensamblador. hola.s
  • Ensamblado: as -o hola.o hola.s Nuestro código en lenguaje ensamblador se ha traducido a código máquina. Nuestra computadora ya es capaz de entenderlo.
    A este archivo hola.o se le denomina código objeto.
  • Enlazado: Las funciones incluídas en nuestro código ya están ensambladas y compiladas en bibliotecas existentes en el sistema. Tenemos que incorporar el código binario de esas funciones a nuestro código para que el programa funcione. gcc -o hola hola.o

Después de todos estos pasos hemos obtenido un archivo ejecutable hola que podremos correr con ./hola

Hola mundo

Nos podríamos haber ahorrado todos estos pasos haciendo gcc hola.c directamente, pero de esta manera nos hemos enterado un poco mejor de todo el proceso. El compilador siempre nos va a devolver un archivo a.out, si queremos ponerle un nombre, hola por ejemplo, hay que introducir gcc hola.c -o hola

Todo esto es válido para un sistema Linux con un compilador gcc y un intérprete de comandos como bash, por ejemplo.