Una vez que tenemos listo todo el ambiente (Geany bien instalado y compilador g++ listo para que Geany lo use), ¡Estamos en condiciones de crear programas con Geany!
A modo de ejemplo, veamos un primer programa de ejemplo que llamaremos “HolaMundo”. En Geany, crear un archivo nuevo llamado “HolaMundo.cpp” (Es importante que todos nuestros archivos de C++ utilicen la extensión “.cpp”, que es la extensión de C++ más común. Si no utilizamos una extensión .cpp, Geany no entenderá que el archivo en cuestión está escrito en el lenguaje C++, y no lo compilará correctamente. Esto es porque Geany permite utilizar también otros lenguajes).
Una vez creado este archivo, copiar (o tipear) el siguiente texto como contenido del mismo. Este texto es un programa escrito en el lenguaje de programación C++. Más adelante estudiaremos bien qué significa cada parte del programa.
#include <iostream> using namespace std; int main() { cout << "Hola mundo!" << endl; return 0; }
Una vez escrito y guardado (Archivo -> Guardar, o Ctrl + S) un programa en Geany, deberemos compilarlo antes de poderlo ejecutar. Para compilar, en Geany utilizamos la tecla F9 (O bien el menú Construir -> Construir).
La ventana de Geany está dividida en dos partes: En la superior podemos escribir el código fuente (texto del programa), y en la inferior Geany nos muestra el resultado de la compilación, que puede ser exitoso o tener errores. Por ejemplo, si compilamos el programa anterior, Geany debería mostrar un resultado exitoso similar al siguiente:
g++ -Wshadow -Wall -Wextra -D_GLIBCXX_DEBUG -o "HolaMundo" "HolaMundo.cpp" (in directory: /home/santo/Documentos/C++) Compilation finished successfully.
La parte de “Compilation finished successfully” nos indica que el resultado de la compilación fue exitosa. Cuando acabamos de compilar exitosamente un programa en Geany, podemos ejecutarlo con la tecla F5 (O bien con el menú Construir -> Ejecutar).
Al ejecutar el programa, la computadora se encarga de realizar todas las instrucciones que el programa le da, una tras otra, y veremos en la pantalla el resultado de la ejecución (si lo hay). En este ejemplo, la única instrucción que da el programa es la de imprimir en la pantalla una línea con el mensaje “Hola mundo!”, y por lo tanto eso será lo que veremos al ejecutar con F5 este programa. Por ejemplo, podríamos ver una pantalla similar a la siguiente:
Hola mundo! ------------------ (program exited with code: 0) Press return to continue
Que los programas nos compilen sin errores como en el caso anterior es algo muy raro. Casi siempre, tenemos pequeños errores en el código fuente, de los cuales el compilador nos irá avisando, y que vamos corrigiendo a medida que los vemos.
Por ejemplo, imaginemos que hubiéramos tipeado el siguiente programa incorrecto:
#include <iostream> using namespace std; int main() { cout << "Hola mundo!" << endl return 0; }
Este es igual al HolaMundo.cpp de la sección anterior, pero nos hemos olvidado un “;”. En este caso, si compilamos este programa con F9, el mensaje que muestra Geany en la parte inferior es:
g++ -Wshadow -Wall -Wextra -D_GLIBCXX_DEBUG -o "HolaMundo" "HolaMundo.cpp" (in directory: /home/santo/Documentos/C++) HolaMundo.cpp: In function ‘int main()’: HolaMundo.cpp:8:5: error: expected ‘;’ before ‘return’ return 0; ^ Compilation failed.
La parte de HolaMundo.cpp:8:5
nos indica que se detectó algún error en el archivo HolaMundo.cpp, en la línea 8, en la columna 5. A continuación se describe el mensaje de error, que en este caso es error: expected ‘;’ before ‘return’
. Esto significa que el compilador estaba esperando un “;” de terminación de la instrucción, pero sin embargo se encontró con el “return” de la línea siguiente, y como la aparición repentina de ese return le resulta inválida, nos informa de este error.
Si se compila este programa, Geany subrayará de rojo automáticamente la línea donde el compilador informa del error, para facilitar encontrar el mismo y así corregir más fácil el programa. Además, si hacemos clic en el error mismo en la parte inferior de los mensajes (Es decir, en la línea en rojo que dice HolaMundo.cpp:8:5: error: expected ‘;’ before ‘return’
), Geany llevará la vista directamente hasta la línea del error y nos la indicará con una flecha amarilla en el lado izquierdo. Esto es especialmente útil en programas largos con por ejemplo 100 líneas, de manera que podamos saltar directamente al error en lugar de buscarlo a mano por todo el archivo.
Algo interesante para notar en este ejemplo es que el compilador nos dice el lugar del archivo donde descubrió que hay un error, pero el error en sí puede estar en otro lugar. En nuestro caso, el compilador recién descubre del error (la falta del “;”) en la línea 8, pero el “;” en sí mismo debería estar en la línea anterior, con lo cual podríamos decir que el error está en la línea 7 en lugar de en la línea 8. Tener esto en mente es útil a la hora de corregir los programas para que compilen correctamente.
Hay que tener cuidado de los siguientes descuidos muy comunes:
Entendamos ahora el contenido del programa, línea por línea. Para algunas de las líneas, no necesitaremos entender bien a fondo los motivos por los cuáles son necesarias, y en realidad lo que haremos en la práctica será copiarlas siempre igual en todos nuestros programas. De cualquier manera, comentamos a continuación todo el programa, para que podamos hacernos al menos una idea de qué hace cada cosa.
#include <iostream> using namespace std; int main() { cout << "Hola mundo!" << endl; return 0; }
La primera línea, #include <iostream>
, es una directiva #include
. Estas directivas se utilizan para indicarle al compilador que vamos a querer utilizar partes de una biblioteca estándar existente. Se le llama biblioteca a un conjunto de elementos que ya están programados, y que podemos entonces utilizar en nuestro programa ahorrándonos así la necesidad de programarlos nosotros. En este caso particular, la línea indica que queremos utilizar la biblioteca iostream. Al hacerlo, a continuación tendremos disponibles todos los elementos de la biblioteca iostream. En nuestro programa en particular, los elementos de esta biblioteca que utilizaremos más adelante serán “cout” y “endl”. Se puede comprobar que si quitamos esta línea del programa, el compilador generará un error en la línea que contiene a “cout” y “endl”, ya que al no haber incluido la biblioteca no podemos usar estos elementos.
La línea using namespace std;
la utilizaremos textualmente en todos nuestros programas. Los elementos de las bibliotecas estándar de C++ están todos contenidos en lo que se llama un namespace, en concreto en el namespace std (Del inglés, “standard”). Si no incluyéramos esta línea, tendríamos que poner std::
delante de cualquier elemento de las bibliotecas estándar, lo cual nos resulta incómodo. Con esta línea indicamos que queremos usar todas las cosas de std “directamente”, sin ponerles std::
delante.
Se puede comprobar por ejemplo, que si eliminamos esta línea, el compilador genera un error en la línea que contiene a cout y endl. Sin embargo, si cambiamos la línea que los contiene por std::cout << “Hola mundo!” << std::endl;
(colocando el std::
delante de cout y endl), el programa pasa a compilar correctamente. Es por esto que utilizamos siempre la línea using namespace std;
, para así evitarnos muchos std::
en el programa.
Luego viene la función main(). Más adelante aprenderemos lo que es una función, y entonces entenderemos que main es una función como cualquier otra. Por ahora, lo importante es saber que con int main()
comienza la parte del programa donde colocaremos todas las instrucciones que la computadora ejecutará secuencialmente, en el orden que indiquemos. Estas instrucciones deben siempre ir rodeadas entre llaves {
y }
. En general, las llaves {
y }
son utilizadas siempre en C++ para encerrar bloques de instrucciones, que se ejecutarán en secuencia, una atrás de otra, en el orden indicado.
Por lo tanto, en todos nuestros programas tendremos una parte de la siguiente forma:
int main() { //...INSTRUCCIONES... }
Donde en la parte que hemos anotado con ...INSTRUCCIONES...
, colocaremos la lista de instrucciones que indicarán a la computadora qué debe hacer, en orden.En nuestro caso, esta lista tiene solamente dos instrucciones.
Notar que todas las instrucciones terminan en “;” : En C++, el símbolo “;” es el marcador de fin de instrucción. Es por eso que si lo omitimos, el compilador piensa que la instrucción continúa en la línea siguiente. Esto está de hecho permitido: es posible partir una instrucción entre varias líneas, y no es obligatorio colocar una sola instrucción por línea, aunque esto es lo más recomendado.
La primera instrucción de nuestro programa es cout << “Hola mundo!” << endl;
. Esta instrucción le ordena a la computadora que muestre el mensaje “Hola mundo!”
por la pantalla. “Hola mundo!”
es lo que llamamos una cadena de texto, es decir, una porción de texto normal para escribir en pantalla, que siempre se escriben en C++ encerrados entre comillas “
. cout
es un elemento de la biblioteca iostream, al cual podemos enviar cadenas de texto para que las muestre por la pantalla. La forma de enviar cadenas a cout es con el símbolo <<
, que visualmente se asemeja a una especie de flecha que apunta hacia cout.
Por eso cout << “Hola mundo!”
le envía el mensaje “Hola mundo!” a cout para que lo imprima. Estos envíos con <<
se pueden encadenar en una misma instrucción, y por ejemplo podríamos haber hecho con idénticos resultados cout << “Hola” << ” “ << “mundo!” << endl;
. Notar en este caso la cadena ” “
, que contiene únicamente un espacio en blanco.
Finalmente, endl
es un elemento especial que se le puede enviar a cout para indicar que se salte a la línea siguiente. En este caso, como escribimos una única línea en la pantalla, quizás no se note la importancia de saltar a la línea siguiente. Sugerimos probar para esto ejecutar dos copias de esta instrucción, y probar las distintas combinaciones de poner y sacar el endl para observar mejor sus efectos.
La última instrucción del programa es return 0
. En todos nuestros programas colocaremos esta instrucción al final del main. Lo que hace esta instrucción es indicar que se debe terminar la función main (que terminará todo el programa) con el código de finalización 0 (que es un código que significa que no hubo errores y todo salió bien).