diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..b76244d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/docsy"] + path = themes/docsy + url = https://github.com/google/docsy.git diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..c99dc7f --- /dev/null +++ b/config.toml @@ -0,0 +1,4 @@ +baseURL = 'https://sergiotarxz.me/' +languageCode = 'en-us' +title = 'Sergiotarxz blog' +theme = "docsy" diff --git a/content/posts/001-intro.md b/content/posts/001-intro.md new file mode 100644 index 0000000..7c63e98 --- /dev/null +++ b/content/posts/001-intro.md @@ -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. diff --git a/content/posts/002-hola-mundo.md b/content/posts/002-hola-mundo.md new file mode 100644 index 0000000..3bc7482 --- /dev/null +++ b/content/posts/002-hola-mundo.md @@ -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 + +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 +``` + +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. diff --git a/themes/docsy b/themes/docsy new file mode 160000 index 0000000..3e2cfeb --- /dev/null +++ b/themes/docsy @@ -0,0 +1 @@ +Subproject commit 3e2cfeba3ad12f23a150934a2620cd8f98d64252