Refactor code structure for improved readability and maintainability
This commit is contained in:
+1281
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
# Capítulo 13 — Tipos más usados de C
|
||||
# Capítulo 14 — Tipos más usados de C
|
||||
|
||||
> Capítulo avanzado. Se apoya en tipos primitivos (`02`), operadores (`03`), arreglos (`06`),
|
||||
> punteros (`07`) y `struct` (`08`).
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 13.1 ¿Por qué no alcanza con un `int`?
|
||||
## 14.1 ¿Por qué no alcanza con un `int`?
|
||||
|
||||
Un `int` resuelve muchísimos casos, pero **no responde de forma portable** tres preguntas:
|
||||
|
||||
@@ -53,7 +53,7 @@ datos** (valores en bits):
|
||||
|
||||
---
|
||||
|
||||
## 13.2 El mapa de los tipos
|
||||
## 14.2 El mapa de los tipos
|
||||
|
||||
Casi ningún tipo "con nombre" es palabra del lenguaje: son **typedefs** de una cabecera. Estos son
|
||||
los que vas a usar todo el tiempo (tamaño típico en un sistema de 64 bits):
|
||||
@@ -78,7 +78,7 @@ los que vas a usar todo el tiempo (tamaño típico en un sistema de 64 bits):
|
||||
|
||||
---
|
||||
|
||||
## 13.3 `size_t` — los tamaños
|
||||
## 14.3 `size_t` — los tamaños
|
||||
|
||||
**Cabecera:** `<stddef.h>`
|
||||
|
||||
@@ -101,7 +101,7 @@ uses en un `for` inverso (`for (size_t i = n - 1; i >= 0; i--)` es **infinito**)
|
||||
|
||||
---
|
||||
|
||||
## 13.4 `wchar_t` — caracteres anchos
|
||||
## 14.4 `wchar_t` — caracteres anchos
|
||||
|
||||
**Cabecera:** `<stddef.h>`
|
||||
|
||||
@@ -135,7 +135,7 @@ clave no es "agrandar" el tipo, sino **elegir el correcto**. **Se imprimen con `
|
||||
|
||||
---
|
||||
|
||||
## 13.5 `NULL` — el puntero nulo
|
||||
## 14.5 `NULL` — el puntero nulo
|
||||
|
||||
**Cabecera:** `<stddef.h>`
|
||||
|
||||
@@ -148,7 +148,7 @@ conceptual.
|
||||
|
||||
---
|
||||
|
||||
## 13.6 `bool` — verdadero o falso
|
||||
## 14.6 `bool` — verdadero o falso
|
||||
|
||||
**Cabecera:** `<stdbool.h>` (C99; en C23, palabra clave)
|
||||
|
||||
@@ -161,7 +161,7 @@ usarlo:** si necesitás más de dos estados, un `enum` expresa mejor la intenci
|
||||
|
||||
---
|
||||
|
||||
## 13.7 Enteros de ancho exacto
|
||||
## 14.7 Enteros de ancho exacto
|
||||
|
||||
**Cabecera:** `<stdint.h>`
|
||||
|
||||
@@ -205,7 +205,7 @@ printf("%llu\n", (unsigned long long)big);
|
||||
|
||||
---
|
||||
|
||||
## 13.8 ¿Tengo que dejar de usar `int`?
|
||||
## 14.8 ¿Tengo que dejar de usar `int`?
|
||||
|
||||
**No.** Estos tipos **no reemplazan** a `int`: lo **complementan** para casos puntuales. El `int`
|
||||
sigue siendo el tipo por defecto para números enteros comunes.
|
||||
@@ -255,7 +255,7 @@ int c = a + b; /* 200: la suma se calcula en int, y al achicar se desborda */
|
||||
|
||||
---
|
||||
|
||||
## 13.9 ¿Los tipos chicos ahorran memoria?
|
||||
## 14.9 ¿Los tipos chicos ahorran memoria?
|
||||
|
||||
**Depende de dónde.** Guardar **muchos** valores en tipos chicos sí ahorra memoria; una variable
|
||||
suelta, no.
|
||||
@@ -290,7 +290,7 @@ struct Color2 { int r, g, b; }; /* 12 bytes */
|
||||
|
||||
---
|
||||
|
||||
## 13.10 Errores comunes
|
||||
## 14.10 Errores comunes
|
||||
|
||||
- Comparar un `int` negativo con `sizeof` o `strlen` (el `-1` se vuelve `SIZE_MAX`).
|
||||
- Guardar un tamaño (`sizeof`, tamaño de un archivo) en un `int`.
|
||||
@@ -301,14 +301,14 @@ struct Color2 { int r, g, b; }; /* 12 bytes */
|
||||
|
||||
---
|
||||
|
||||
## 13.11 Ejercicios
|
||||
## 14.11 Ejercicios
|
||||
|
||||
> De **noob** a **pro**, con dificultad creciente. Cada ejercicio declara sus conceptos objetivo;
|
||||
> resolvelos **usando esos conceptos**. Trae un **escenario de prueba** (entrada/salida esperada,
|
||||
> nunca el algoritmo) para que compares lo que imprimís. Compilá con un estándar moderno (C11 o C23)
|
||||
> y avisos activos (`-Wall -Wextra`).
|
||||
|
||||
### Ejercicio 13.1 — Radiografía de tipos
|
||||
### Ejercicio 14.1 — Radiografía de tipos
|
||||
|
||||
**Conceptos** · `sizeof`, `size_t`, `printf` (`%zu`), tipos de `<stddef.h>` y `<stdint.h>`
|
||||
|
||||
@@ -342,7 +342,7 @@ LP64 (Linux/macOS 64-bit) LLP64 (Windows 64-bit)
|
||||
|
||||
---
|
||||
|
||||
### Ejercicio 13.2 — Sumar con `size_t`
|
||||
### Ejercicio 14.2 — Sumar con `size_t`
|
||||
|
||||
**Conceptos** · `size_t`, arreglos, `for`, casos borde
|
||||
|
||||
@@ -369,7 +369,7 @@ count = 1 ; [-5] -> -5
|
||||
|
||||
---
|
||||
|
||||
### Ejercicio 13.3 — El índice que se convierte en gigante
|
||||
### Ejercicio 14.3 — El índice que se convierte en gigante
|
||||
|
||||
**Conceptos** · conversiones con/sin signo, `size_t`, comparaciones
|
||||
|
||||
@@ -395,7 +395,7 @@ explicación: -1 convertido a size_t = SIZE_MAX (18446744073709551615), y SIZE_M
|
||||
|
||||
---
|
||||
|
||||
### Ejercicio 13.4 — Texto que no entra en un byte
|
||||
### Ejercicio 14.4 — Texto que no entra en un byte
|
||||
|
||||
**Conceptos** · `wchar_t`, `L""`, `%lc`, `%ls`, `<uchar.h>`
|
||||
|
||||
@@ -426,7 +426,7 @@ contraste: guardar 'ñ' en un char y usar %c da basura o un byte suelto.
|
||||
|
||||
---
|
||||
|
||||
### Ejercicio 13.5 — El entero de ancho exacto (pro)
|
||||
### Ejercicio 14.5 — El entero de ancho exacto (pro)
|
||||
|
||||
**Conceptos** · `<stdint.h>`, tipos de ancho exacto, portabilidad
|
||||
|
||||
@@ -457,7 +457,7 @@ total = 123456789012345ULL (uint64_t) -> 123456789012345
|
||||
|
||||
---
|
||||
|
||||
## 13.12 Cierre
|
||||
## 14.12 Cierre
|
||||
|
||||
Los tipos de C no son un adorno: son la forma de decir **qué querés representar** y **de qué
|
||||
tamaño**. `size_t` para tamaños, `uintN_t`/`intN_t` para ancho exacto, `bool` para verdades,
|
||||
Reference in New Issue
Block a user