Herramientas de usuario

Herramientas del sitio


curso-cpp:hola-mundo

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
curso-cpp:hola-mundo [2016/09/23 17:36]
santo [Ejemplo de programa con un error de compilación]
curso-cpp:hola-mundo [2017/10/29 19:16] (actual)
santo
Línea 1: Línea 1:
 ====== Hello World ====== ====== Hello World ======
  
-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!+===== Primer programa de Ejemplo ===== 
 + 
 +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). 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++.+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.
  
-<​code>​+<​code ​cpp>
 #include <​iostream>​ #include <​iostream>​
  
Línea 44: Línea 46:
  
  
-====== Ejemplo de programa con un error de compilación ​======+===== Ejemplo de programa con un error de compilación =====
  
 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. 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.
Línea 50: Línea 52:
 Por ejemplo, imaginemos que hubiéramos tipeado el siguiente programa incorrecto: Por ejemplo, imaginemos que hubiéramos tipeado el siguiente programa incorrecto:
  
-<​code>​+<​code ​cpp>
 #include <​iostream>​ #include <​iostream>​
  
Línea 75: Línea 77:
 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. 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 ejecuta la compilación de este programa, ​notará que Geany subraya ​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 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.+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. 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.
 +
 +===== Descuidos comunes =====
 +
 +Hay que tener cuidado de los siguientes descuidos muy comunes:
 +  * Olvidarse de **usar F9 para compilar el programa**, y en cambio usar directamente F5 para ejecutarlo. Si hacemos esto, Geany ejecutará la última versión que hayamos compilado, que puede no ser igual a la que tenemos a la vista y así generarnos confusión. Si nunca hemos compilado nada, se verá un mensaje de error al ejecutar.
 +  * Usar F9 para compilar el programa, y luego usar F5 para ejecutar el programa, **pero el programa no compiló exitosamente**. Si hacemos eso, Geany ejecutará la última versión que compiló exitosamente. Como esa no es la que tenemos escrita en el archivo (que es la que no ha compilado exitosamente),​ nuevamente esto puede causarnos confusión.
 +
 +===== Análisis del programa Hola Mundo  =====
 +
 +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.
 +
 +<code cpp>
 +#include <​iostream>​
 +
 +using namespace std;
 +
 +int main()
 +{
 +    cout << "Hola mundo!"​ << endl;
 +    return 0;
 +}
 +</​code>​
 +
 +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:
 +
 +<code cpp>
 +int main()
 +{
 +    //​...INSTRUCCIONES...
 +}
 +</​code>​
 +
 +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).
curso-cpp/hola-mundo.1474652177.txt.gz · Última modificación: 2016/09/23 17:36 por santo