forked from sergiotarxz/Blag
145 lines
4.1 KiB
Markdown
145 lines
4.1 KiB
Markdown
---
|
|
title: "Hola mundo"
|
|
date: 2022-01-24T20:32:57+01:00
|
|
draft: false
|
|
weight: 2
|
|
---
|
|
|
|
# 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:
|
|
|
|
```c
|
|
#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:
|
|
|
|
```shell
|
|
sudo apt update && sudo apt install build-essential
|
|
```
|
|
|
|
Una vez tengamos el compilador instalado podrás compilar tu código usando:
|
|
|
|
```shell
|
|
gcc hola_mundo.c -o hola_mundo
|
|
```
|
|
|
|
Y ejecutarlo con:
|
|
|
|
```shell
|
|
./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.
|