Para nuestra primera compilaci'on, crearemos el t'ipico ``hola mundo''. Estando en nuestro ``home'' (ejecutar cd simplemente para asegurarnos de 'esto), crearemos un fichero ASCII llamado hola_mundo.cc. Usaremos por ejemplo el editor emacs. Escribir en el shell, emacs hola_mundo.cc&. Aparecer'a una ventana, a la que probablemente deber'eis llevar el puntero de rat'on para seleccionar. En ella teclear el c'odigo:
#include <iostream.h>
void main() {
cout << "Hola mundo\n";
}
Como pod'eis ver, se trata de una 'unica funci'on, que no tiene argumentos (aunque puede tenerlos cuando desde la l'inea de comandos se desea pasar un argumento al main(int argc, char *argv[])). La directiva de preprocesamiento #include <iostream.h> coloca este fichero cabecera est'andar justo antes de la funci'on main(). Este fichero cabecera es necesario incluirlo en cualquier programa en C++ que desea hacer uso de las corrientes de entrada y salida est'andar en C++. La corriente de salida est'andar se llama cout, y el redirector hacia esta corriente es denota por «. En este programa sobre la salida est'andar estamos llevando la cadena ``Hola mundo\n''. Por 'ultimo, decir que los bloques en C++ (tambi'en en C) est'an delimitados por las llaves abierta y cerrada.
Para compilar nuestro programa escrito en C++ usaremos el comando:
c++ hola_mundo.cc
El compilador llama de forma transparente al enlazador (linker) y genera un fichero (binario, no ASCII) ejecutable llamado a.out. Sabemos que se trata de un fichero ejecutable porque si ejecutamos ahora el comando ls -l a.out, aparecer'a en pantalla (la salida est'andar para ls) algo similar a:
-rwxr-xr-x 1 vruiz arcomel 13606 May 24 18:55 a.out*
Podemos observar que efectivamente se trata de un fichero ejecutable porque aparecen tres x's en la tercera, sexta y novena columnas, indicando que el due no del fichero (usted) puede ejecutarlo, cualquier miembro del grupo al que usted pertenece tambi'en puede ejecutarlo y cualquier otro usuario de la m'aquina puede ejecutarlo. Adem'as, cualquier usuario del grupo puede leerlo, aunque s'olo usted puede editarlo1. Las 'unicas cosas que pueden cambiar en la l'inea anterior respecto de lo que se está viendo en pantalla es que el n'umero de bloques de disco puede ser mayor que 1 si el fichero ejecutable es muy grande, el usuario es vruiz, el grupo al que pertenece el usuario no es arcomel, el tama no del fichero ejecutable no es 13606 y el fichero se ha compilado el d'ia 24 de Mayo a las 18:55 horas.
Para ejecutarlo, invocar en el shell el nombre del fichero que contiene el programa compilado, escribiendo a.out. Este nombre es el asignado por defecto por el compilador a cualquier programa ejecutable del que no nos hemos preocupado en la l'inea de compilaci'on de asignarle un nombre alternativo. Si quisi'eramos que nuestro fichero ejecutable se llamara hola_mundo, debi'eramos haber escrito:
c++ hola_mundo.cc -o hola_mundo
Ahora vamos a usar la compilaci'on separada. Crearemos tres ficheros diferentes llamados presentacion.cc, calculo.cc y calculo.h. El contenido de presentacion.cc debe ser:
#include <iostream.h>
#include "calculo.h"
void main() {
cout << "El resultado el c'alculo es: "
<< calculo()
<< '\n';
}
El contenido de calculo.h debiera ser:
int calculo();indicando que existe una funci'on llamada c'alculo que devuelve un entero.
El programa presentacion.cc puede ser compilado (ojo, sin ser enlazado, lo cual ya ahorra tiempo compilando):
c++ -c presentacion.cc
El copilador genera un fichero llamado presentacion.o que contiene s'olo el c'odigo m'aquina generado por el c'odigo escrito en presentacion.cc y por tanto, debe tratarse de un fichero peque no.
Supongamos que el contenido del fichero calculo.cc es:
#include "calculo.h"
int calculo() {
return 2*2;
}
Este es el fichero que una y otra vez vamos a estar editando, depurando, y es el 'unico c'odigo fuente que va a variar de una compilaci'on a otra. En este caso, para generar un fichero ejecutable que muestre el resultado de nuestro c'alculo, podremos escribir:
c++ calculo.cc presentacion.o -o producto
Si estudiamos con cuidado este comando, veremos que no existe el flag de compilaci'on -c, con lo que el enlazador ser'a invocado tras la compilaci'on del fichero calculo.cc. El fichero presentacion.o NO se compila, pues est'a ya compilado.
Si presentacion.cc hubiera sido tambi'en modificado desde la 'ultima compilaci'on, con el comando:
c++ calculo.cc presentacion.cc -o productover'iamos el resultado de los cambios.