AnteriorPosterior

1.1 Escribir un texto en C

  Curso: Fundamentos de programación en C, por Nacho Cabanes

Vamos con un primer ejemplo de programa en C, posiblemente el más sencillo de los que “hacen algo útil”. Se trata de escribir un texto en pantalla. La apariencia de este programa la vimos en el tema anterior. Vamos a verlo ahora con más detalle:

#include <stdio.h>
 
main() 
{
  printf("Hola");
}

Esto escribe “Hola” en la pantalla. Pero hay mucho que comentar:

  • Eso de “#include” nos permite incluir ciertas características para ampliar el lenguaje base. En este caso, el motivo es que en el lenguaje C base no hay predefinida ninguna orden para escribir en pantalla (!), sino que este tipo de órdenes son una extensión, que se define en un fichero llamado “stdio.h”. Esto no es un problema, vamos a encontrar ese “stdio.h” en cualquier compilador que usemos. ¿Por qué no hay órdenes de pantalla en el lenguaje base? Hay que recordar que un ordenador no es sólo lo que acostumbramos a tener sobre nuestra mesa, con pantalla y teclado: existen otros muchos tipos de ordenadores que realizan tareas complejas y no necesitan una pantalla durante su funcionamiento normal, como el ordenador que controla el ABS de un coche. ¿Y por qué se pone entre < y >? ¿Y por qué eso de # al principio? Esos detalles los iremos viendo un poco más adelante.
  • Ya que hemos hablado de ella, "printf" es la orden que se encarga de mostrar un texto en pantalla, la responsable de que hayamos escrito ese “include” al principio del programa.
  • Aun quedan cosas: ¿qué hacen esas llaves { y } ? C es un lenguaje estructurado, en el que un programa está formado por diversos “bloques”. Todos los elementos que componen este bloque deben estar relacionados entre sí, lo que se indica encerrándolos entre llaves: { y }.
  • Finalmente, ¿qué es eso de “main”? Es algo que debe existir siempre, e indica el punto en el que realmente comenzará a funcionar el programa. Después de "main" van dos llaves { y }, que delimitan el bloque más importante: el cuerpo del programa.¿Y por qué tiene un paréntesis vacío a continuación? Eso lo veremos más adelante...

Y la cosa no acaba aquí. Aún queda más miga de la que parece en este programa, pero cuando ya vayamos practicando un poco, iremos concretando más alguna que otra cosa de las que aquí han quedado poco detalladas.

Ejercicio propuesto: Crea un programa en C que te salude por tu nombre (ej: “Hola, Nacho”).

Sólo un par de cosas más antes de seguir adelante:

  • Cada orden de C debe terminar con un punto y coma (;)
  • El C es un lenguaje de formato libre, de modo que puede haber varias órdenes en una misma línea, u órdenes separadas por varias líneas o espacios entre medias. Lo que realmente indica dónde termina una orden y donde empieza la siguiente son los puntos y coma. Por ese motivo, el programa anterior se podría haber escrito también así (aunque no es aconsejable, porque puede resultar menos legible):

    #include <stdio.h>
    main()  {  printf("Hola"); }

  • De hecho, hay dos formas especialmente frecuentes de colocar la llave de comienzo, y yo usaré ambas indistintamente. Una es como hemos hecho en el primer ejemplo: situar la llave de apertura en una línea, sola, y justo encima de la llave de cierre correspondiente. La segunda forma habitual es situándola a continuación del nombre del bloque que comienza (en nuestro caso, a continuación de la palabra “main”), así:

#include <stdio.h>
 
main()  {
  printf("Hola");
}

(esta es la forma que yo emplearé en este texto cuando estemos trabajando con fuentes de mayor tamaño, para que ocupe un poco menos de espacio).

  • La gran mayoría de las órdenes que encontraremos en el lenguaje C son palabras en inglés o abreviaturas de éstas. Pero hay que tener en cuenta que C distingue entre mayúsculas y minúsculas, por lo que "printf" es una palabra reconocida, pero "Printf", "PRINTF" o "PrintF" no lo son.

 

¿Y si ese programa "me da error"? En algunas revisiones recientes del lenguaje C (especialmente en los compiladores que siguen el estándar C99) se obliga a que aparezca la palabra "int" antes de "main", y a que la última línea sea "return 0;". Veremos los motivos más adelante, en el tema 7, pero de momento asumiremos que si queremos que nuestro programa se pueda probar con cualquier compilador, su apariencia deberá ser ésta:

#include <stdio.h>
 
int main() 
{
  printf("Hola");
  return 0;
}

1.1.1. Cómo probar este programa en Linux

(Nota: este apartado está más actualizado en la versión 0.95 PDF del curso; pronto se incluirán aquí esos cambios)

Los sistemas operativos de la familia Unix, como Linux, suelen incluir un compilador de C, de modo que será fácil probar nuestros programas. Supondremos que se trata de una versión de Linux de los últimos años, que tenga entorno gráfico. Podríamos usar el editor del texto del entorno gráfico, teclear el fuente y guardarlo en nuestra carpeta personal, por ejemplo con el nombre ejemplo001.c (lo que sí es importante es que termine en “.c”):

(Imagen pronto disponible)

(en esta imagen se trata de Mandrake Linux 9.1, con el entorno Gnome y el editor básico que incorpora, GEdit).

Después abriríamos una ventana de terminal y teclearíamos la siguiente orden para compilar nuestro fuente:

cc ejemplo001.c –o miprograma

Donde:

  • “cc” es la orden que se usa para poner el compilador en marcha.
  • “ejemplo001.c” es el nombre del fuente que queremos compilar.
  • La opción “-o” se usa para indicar el nombre que queremos que tenga el fichero ejecutable resultante (la “o” viene de “output”, salida).
  • “miprograma” es el nombre que tendrá el programa ejecutable.

Y para probar el programa teclearíamos

./miprograma

Con lo que debería aparecer escrito “Hola” en la pantalla.

(Imagen pronto disponible)

(Nota: Las versiones más recientes de Linux tienen entornos integrados, desde los que podemos teclear y probar nuestro programa, con más comodidad, como en el caso de la herramienta que vamos a comentar para Windows. Dos de los entornos más extendidos son KDevelop y Anjuta).


1.1.2. Cómo probar este programa en Windows

(Nota: este apartado está más actualizado en la versión 0.95 PDF del curso; pronto se incluirán aquí esos cambios)

La familia de sistemas Windows no incluye ningún compilador de C, de modo que tendremos que localizar uno e instalarlo. Existen muchos gratuitos que se pueden descargar de Internet, y que incluyen un editor y otras herramientas auxiliares. Es el caso de Dev-C++, por ejemplo, que tiene su página oficial en www.bloodshed.net. La instalación es poco más que hacer doble clic en el fichero descargado, y hacer clic varias veces en el botón “Siguiente”:

(Imagen pronto disponible)

En el caso de Dev-C++, podemos incluso trabajar con el entorno en español:

(Imagen pronto disponible)

 

Para crear nuestro programa, en el menú "Archivo" escogemos "Nuevo  / Código fuente", y nos aparece un editor vacío en el que ya podemos empezar a teclear. Si queremos nuestro programa en funcionamiento, entraríamos al menú “Ejecutar” y usaríamos la opción “Compilar y ejecutar”:

(Imagen pronto disponible)

(si todavía no hemos guardado los cambios en nuestro fuente, nos pediría antes que lo hiciéramos).

 

Puede ocurrir que se muestre el resultado en pantalla, pero la ventana desaparezca tan rápido que no tengamos tiempo de leerlo. Si es nuestro caso, tenemos dos opciones:

  • Algunos entornos (como los de la familia Turbo C y Borland C) tienen una opción “User Screen” (pantalla de usuario) en el menú “Run” (ejecutar), que nos mostraría lo que ha aparecido en esa pantalla que no pudimos leer.

(Imagen pronto disponible)

  • Otros entornos, como Dev-C++, no tienen esa posibilidad, por lo que deberíamos hacer un pequeño cambio a nuestro fuente, para que espere a que pulsemos la tecla Intro antes de terminar. Una orden que nos permitiría hacer eso (y que veremos con más detalle más adelante) es “getchar()”, así que nuestro fuente quedaría

#include <stdio.h>
 
main() 
{
  printf("Hola");
  getchar();
}

O bien, si usamos la sintaxis más detallada:

#include <stdio.h>
 
int main() 
{
  printf("Hola");
  getchar();
  return 0;
}

Actualizado el: 22-07-2014 23:05

AnteriorPosterior