El típico primer “¡Hola Mundo!”

“¡Hola Mundo!” con la librería C standard

Con la librería standard de C, puedes escribir el ejemplo de “¡Hola Mundo!” exactamente tal como viene en los libros de C. Veamoslo a continuación.

#include <stdio.h>

int main(void)
{
printf(“¡Hola Mundo!\n”);
return 0;
}

Este código fuente lo puedes escribir en cualquier editor de texto y grabarlo como holamundo.c (no funcionará copiandolo pues la web usa formatos distintos a la hora del sangrado). Para compilarlo, abre una ventana de Shell (desde el menú de Ambient, o usando la combinación de teclas rcommand + n) y cambia el directorio actual donde tengas grabado el código fuente.

Ejecuta el compilador de la siguiente forma:

gcc -o holamundo holamundo.c

El compilador creará un ejecutable llamado holamundo, que en mi sistema es de 10.340 bytes. Date cuenta que MorphOS no presta atención a la extensión del nombre del ejecutable, por lo que no necesita que este acabe en .exe, sin embargo, podemos ponerlo si queremos. Normalmente los ejecutables en MorphOS no llevan ninguna extensión. La opción del compilador -o especifica el nombre del ejecutable que queremos.Si no ponemos esta opción, el ejecutable se llamará  a.out (por razones históricas).

Como dijimos en Introducción al SDK de MorphOS, la librería standard de C se suministra con la ixemul.library. Se puede confirmar fácilmente siguiendo la actividad del disco que hace el programa holamundo usando la herramienta Snoopium.

 

snoopium

Actividad del disco que hace holamundo (helloworld)

Se puede ver que otras muchas librerías se abren y son usadas, incluyendo algunas relacionadas con el protocolo TCP/IP de comunicaciones. Parece una locura para un programa tan pequeño. Esto ocurre, porque la ixemul.library crea un entorno estilo unix para la aplicación, que en realidad no es necesario para este ejemplo tan sencillo. Por eso la alternativa libnix se recomienda para usar como librería standard. Para usarlo, se tiene que usar la opción –noixemul, llamando al compilador de la siguiente forma:

gcc -noixemul -o holamundo holamundo.c

El ejecutable generado es más grande (30.964 bytes en este sistema), que confirma el hecho de que libnix es una librería que se enlaza estáticamente. Es decir, el tamaño de todas las funciones que se usan se añaden al tamaño del ejecutable. Todos los manuales de C dicen que printf() es la función de entrada/salida standard más “cara”, lo cual lo acabamos de comprobar…Por otra parte, la actividad del programa se ha visto reducida a tres entradas como vemos con Snoopium. No se abre ningún recurso externo.

“¡Hola Mundo!” con el API nativo de MorphOS

El API (Application Programmer Interface) de MorphOS suministra un completo sistema de entrada/salida para ficheros y consola. De echo, las funciones de las librerías standards de C y  C++ son copias de las llamadas nativas de MorphOS. Usar el API nativo tiene las siguientes ventajas:

  • Los programas son mucho más cortos.
  • Los programas son más rápidos, gracias a que eliminamos algunas capas de abstracción.
  • Los programas necesitan menos recursos.
  • El API nativo da acceso a cualidades específicas de MorphOS.

Estas ventajas tienen un precio:

  • Los programas que usan el API nativo no son portables (excepto si se porta a AmigaOS y AROS hasta cierto punto).
  • El printf() nativo no soporta números en coma flotante. La única excepción es NewRawDoFmt() de la exec.library.

El ejemplo de “¡Hola Mundo!” usando el API nativo sería:

#include <proto/dos.h>

int main(void)
{
Printf(“Hello World!\n”);
return 0;
}

La cebecera incluida proporciona todas las cosas necesarias para usar la dos.library, que es donde reside Printf(). La función en si funciona de la misma manera que la de la librería standard printf(), con algunas pequeñas diferencias. El código se compila de esta manera:

gcc -noixemul -o holamundo holamundo.c

El comando es el mismo que hemos usado en el ejemplo de libnixprintf(), sin embargo, no usamos las funciones standard de C, por lo que no se enlazan. Ahora el tamaño del ejecutable se reduce a 13.500 bytes.

¿Porque aún se necesita libnix si no estamos usando las llamadas a la librería standard? ¿No podemos compilarlo con -nostdlib? Aparte de la librería standard de C, libnix también suministra código de arranque a la aplicación. Un programa sin código de arranque todavía funciona si se lanza desde Shell, pero fallará si se ejecuta desde Ambient. El codigo de arranque también suministra la caracteristica de apertura y cierre de librerías de MorphOS automáticamente. Excluir libnix es completamente posible, pero requiere escribir tu propio código de arranque y abrir y cerrar las librerías manualmente.

Nota: generalmente se excluye libnix para componentes de MorphOS mas que para aplicaciones, como librerías compartidas o Reggae y classes MUI públicas. También se puede hacer con programas normales para hacerlos mas pequeños, especialmente si un programa es pequeño. Para grandes proyectos ahorrar unos bytes escribiendo tu propio código de arranque no merece la pena.

 

Este texto pertenece a  Grzegorz Kraszewski. Puedes encontrar el original aquí.

 

Licencia de Creative Commons
The First Traditional “Hello world!” by Grzegorz Kraszewski is licensed under a Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional License.
Creado a partir de la obra en http://krashan.ppa.pl/mph/the-first-traditional-hello-world.

3 Respuestas a “El típico primer “¡Hola Mundo!”

  1. Gracias jabirulo. Supongo que para tu nivel es todo muy evidente y fácil. Ya iremos poniendo cosas más enredosas!😉

  2. Ké compilador de C existe para los Amiga classic ?¿
    Siempre se hacían ‘cosillas’ en Amos o Asm… pero nunca ví nada de C.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s