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