forked from sergiotarxz/Blag
Adding initial tutorial.
This commit is contained in:
parent
300ffee89b
commit
42eaacf2ce
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "themes/docsy"]
|
||||||
|
path = themes/docsy
|
||||||
|
url = https://github.com/google/docsy.git
|
4
config.toml
Normal file
4
config.toml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
baseURL = 'https://sergiotarxz.me/'
|
||||||
|
languageCode = 'en-us'
|
||||||
|
title = 'Sergiotarxz blog'
|
||||||
|
theme = "docsy"
|
16
content/posts/001-intro.md
Normal file
16
content/posts/001-intro.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: "Intro"
|
||||||
|
date: 2022-01-24T20:32:57+01:00
|
||||||
|
draft: false
|
||||||
|
weight: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Introducción
|
||||||
|
|
||||||
|
## ¿Qué esperar de este libro?
|
||||||
|
|
||||||
|
Este libro espera ser una introducción al lenguaje de bajo nivel C. C es un
|
||||||
|
lenguaje versatil muy cercano a la máquina.
|
||||||
|
|
||||||
|
El objetivo final de este libro será que el lector sea capaz de crear
|
||||||
|
sus propias interfaces gráficas con C y GTK en el entorno GNOME.
|
144
content/posts/002-hola-mundo.md
Normal file
144
content/posts/002-hola-mundo.md
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
---
|
||||||
|
title: "Intro"
|
||||||
|
date: 2022-01-24T20:32:57+01:00
|
||||||
|
draft: false
|
||||||
|
weight: 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:
|
||||||
|
|
||||||
|
```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.
|
1
themes/docsy
Submodule
1
themes/docsy
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 3e2cfeba3ad12f23a150934a2620cd8f98d64252
|
Loading…
Reference in New Issue
Block a user