Blag/content/posts/002-hola-mundo.md

4.1 KiB

title date draft weight
Intro 2022-01-24T20:32:57+01:00 false 1

Hola mundo

Escribiendo y ejecutando hola mundo.

Es una tradición entre los programador comenzar a aprender un lenguaje escribiendo hola mundo en pantalla con el mismo.

El programa más simple para hacer esto en C es:

#include <stdio.h>

int
main (int argc, char **argv) {
    printf ("%s\n", "Hello world!!!");
    return 0;
}

Si introducimos este código en un fichero llamado hola_mundo.c ya tendremos un programa capaz de escribir Hello world en pantalla; no obstante el ordenador aun no es capaz de entender dicho programa debido a que está escrito en lenguaje humano.

Para compilarlo a lenguje máquina necesitaremos el compilador de C gcc.

Si usas una distribución basada en Debian puedes obtenerlo usando:

sudo apt update && sudo apt install build-essential

Una vez tengamos el compilador instalado podrás compilar tu código usando:

gcc hola_mundo.c -o hola_mundo

Y ejecutarlo con:

./hola_mundo
Hello world!!!

Explicando los conceptos nuevos introduccidos en el programa.

Este programa a pesar de ser muy simple es muy bueno para explicar muchos conceptos del lenguaje C a los recien llegados al lenguaje analizemoslo por partes:

#include <stdio.h>

Esta línea incluye una parte de la librería estandar de C que se encarga de manipular como su nombre indica io (Entrada/Salida).

Hemos tenido que importar los nombres de esa librería o header en nuestro programa para tener la función printf disponible que se encarga de pintar en pantalla, lo veremos más adelante.

int
main (int argc, char **argv) {

En estas dos líneas estamos abriendo la función main, que es la función que será la primera en ser ejecutada en los programas escritos en C.

El primer int indica que esta función retornará un entero, en es caso de la función main este entero se usará como el estado de salida del proceso.

0 significa que todo ha ido bien, pero para hacer nuestro programa útil para shell scripting a veces necesitaremos indicar que ha ido mal, para ello solo tendremos que indicar un estado distinto de 0.

main es el nombre de la función que podremos usar en otras funciones para llamarla

(int argc, char **argv)

Siempre que un programa hecho en C quiera parsear sus parámetros necesariamente tendrá que dejar esta firma de parametros en su función main, si no nos importan los parámetros podríamos haber escrito:

(void)

int argc indica el numero de parámetros recibidos en nuestro programa.

char **argv

Un tipo seguido de un * indica que el mismo es un puntero, un puntero puede guardar una dirección de memoria que te permite acceder a una o más instancias de un tipo de dato, en este caso se usan punteros para guardar lo que comúnmente se conocerían en otros lenguajes como arrays.

Osea char ** significa puntero a puntero de char o array de arrays de char.

En C los strings se suelen representar como char * por tanto también podríamos verlo como un array de strings.

En C un array que no hayamos creado nosotros es muy dificil saber su tamaño, otros lenguages te permiten hacer cosas como length (argv) para remediar esto, pero C al ser un lenguaje de bajo nivel espera que sea el programador quien se encargue de ello.

char **argv no lo hemos creado nosotros; sin embargo podemos usar argc para conocer su tamaño.

Pero, ¿Y el tamaño de los strings contenidos por argv?

Para evitar tener que propagar el tamaño de cada string en C se usa una convención de que todos los strings terminan en un caracter nulo, por lo que con la función strlen podremos saber el tamaño de un string sin que nos lo hayan pasado.

printf ("%s\n", "Hello world!!!"); La función printf usa format strings para funcionar, el primer argumento define como se renderizaran los siguientes, es decir %s significa pintar el primer argumento como un string \n imprimir un salto de línea.

return 0; indica finalizar el programa con estado de retorno 0.

}

Simplemente termina la función y con ella el programa.