Computadoras y Programación · ENES Juriquilla · UNAM
Módulo 3 · Sesión 1 · Lenguaje C
terminal — curso
$ gcc hola.c$ ./a.outHola, mundo$

Hola, mundo.

Tu primer programa en C: del texto a algo que la máquina sí ejecuta.
Por
Walter Rosales
Te lo digo con cariño

Tu computadora no entiende lo que escribes.

bash
$ ESCRIBIR "Hola, mundo"bash: ESCRIBIR: command not found
Ni tu pseudocódigo, por muy bien pensado que esté. Hoy aprendemos al traductor.
Para qué sirve C

Está debajo de lo que usas todos los días.

Sistemas operativos
El núcleo de Linux está escrito en C.
Microcontroladores
Chips diminutos, con memoria medida en kilobytes.
Videojuegos y motores
El núcleo que no puede darse el lujo de esperar.
Firmware
El programa que vive dentro del aparato.
Rendimiento
Cuando cada ciclo del procesador cuenta.
Otros lenguajes
CPython, el Python de referencia, está escrito en C.
Después del pseudocódigo

Ya sabes pensar. Falta escribirlo en C.

Pseudocódigo
C
INICIO
int main(void) {
ESCRIBIR "Hola, mundo"
printf("Hola, mundo\n");
FIN
return 0; }
SI · MIENTRAS
if · while
Las estructuras que ya conoces cambian de disfraz, no de idea.
Qué es un compilador

Traduce el libro completo, una vez.

Compilador
como traducir el libro y mandarlo a imprimir · C
hola.c
código fuente
compilador
gcc · clang
a.out · a.exe
ejecutable
Hola, mundo
corre solo
Intérprete
como un traductor simultáneo · p. ej. Python
hola.py
código fuente
intérprete
lee y ejecuta, línea por línea
Hola, mundo
resultado
Instalar un compilador

Una ruta por sistema. Pocos clics.

Sistema
Ruta recomendada
Plan B
Windows
w64devkit
Descargas un archivo, lo ejecutas, se extrae. Sin instalador ni permisos de administrador.
MSYS2 (instalador completo)
macOS
xcode-select --install
Un comando y un clic en Install. Trae clang, y cc funciona.
Xcode completo (pesa mucho más)
Linux
sudo apt install build-essential
Debian y Ubuntu. Trae gcc, make y las bibliotecas base.
Tu gestor de paquetes (dnf, pacman…)
Fuentes: github.com/skeeto/w64devkit · developer.apple.com (Installing the Command Line Tools) · packages.ubuntu.com/noble/build-essential
Paso a paso

Y para comprobar: gcc --version.

Windows
navegador → carpeta
# 1. github.com/skeeto/w64devkit # 2. Releases → w64devkit-x64-….7z.exe # 3. Ejecútalo: se extrae # 4. Abre w64devkit.exe $ gcc --version
Descarga el archivo más reciente de la página de Releases.
macOS
Terminal
% xcode-select --install # Se abre un diálogo: # clic en Install % cc --version
El diálogo del sistema descarga las herramientas de línea de comandos.
Linux
terminal
$ sudo apt update $ sudo apt install build-essential $ gcc --version
Para Debian y Ubuntu. Otras distribuciones usan su propio gestor.
Plan B · sin instalar nada
RunDebugStopShareLanguage: C
main.c #include <stdio.h> int main(void) { printf("Hola, mundo\n"); return 0; }
Hola, mundo
Esquema de la interfaz · onlinegdb.com/online_c_compiler
1
Abre onlinegdb.comCompilador de C en el navegador.
2
Elige el lenguaje CEscribe o pega tu programa.
3
Clic en RunLa salida aparece abajo.
hola.c · cinco líneas que importan
hola.c
#include <stdio.h>1
int main(void)2
{3
printf("Hola, mundo\n");4
return 0;5
}3
1Trae a printfstdio = entrada y salida estándar
2Aquí empieza todomain es el punto de entrada
3Las llavesabren y cierran el cuerpo
4Imprime el texto\n salta de línea · el ; cierra la instrucción
5Termina con 00 significa que todo salió bien
El ciclo del Módulo 3

Editar. Compilar. Ejecutar.

Windows
C:\curso> gcc hola.cC:\curso> a.exeHola, mundo
macOS · Linux
$ gcc hola.c$ ./a.outHola, mundo
Si no le dices nombre, el compilador elige: a.exe en Windows, a.out en macOS y Linux. Con -o hola lo eliges tú.
Un punto y coma menos

El compilador lee todo. Y no perdona.

error.c
$ clang error.c error.c:5:28: error: expected ';' after expression 5 | printf("Hola, mundo\n") | ^ | ; 1 error generated.
Te dice archivo, línea, columna y hasta cómo arreglarlo. Léelo: es el mejor tutor que vas a tener a las 2 a. m.
Salida real de clang 21.1.0 · gcc lo expresa con otras palabras
Qué es una función

Una máquina: entra algo, sale algo.

a = 2
b = 3
suma
a + b
5
Entradas · parámetros
Lo que la función recibe.
Salida · valor de retorno
Lo que la función devuelve a quien la llamó.
FUNCIÓN suma(a, b)
RETORNAR a + b
FIN-FUNCIÓN
Cómo se declara

Cuatro piezas. main también es una.

int
tipo de retorno
Qué tipo de valor devuelve.
suma
nombre
Cómo la vas a llamar.
(int a, int b)
parámetros
Las entradas, con su tipo.
{ … }
cuerpo
Lo que hace la máquina.
int suma(int a, int b) { return a + b; }
Y int main(void) sigue la misma receta: devuelve un int (el 0 del final) y no recibe nada.
Definir, llamar, recibir
suma.c
#include <stdio.h> int suma(int a, int b) { return a + b; } int main(void) { int total = suma(2, 3); printf("%d\n", total); return 0; }
$ gcc suma.c && ./a.out 5
Lo que pasa al llamar
1suma(2, 3)
main llama a la función
2a = 2, b = 3
los parámetros reciben los valores
3return 5
el cuerpo calcula y devuelve
4total = 5
main guarda el valor de retorno
El prototipo

Avisa que existe antes de usarla.

Sin prototipo
suma_sinproto.c:5:20: error: call to undeclared function 'suma'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 5 | printf("%d\n", suma(2, 3)); | ^ 1 error generated.
Salida real de clang 21.1.0
Con prototipo
#include <stdio.h> int suma(int a, int b); /* prototipo */ int main(void) { printf("%d\n", suma(2, 3)); return 0; } int suma(int a, int b) { return a + b; }
Compila y imprime 5
El prototipo es la firma de la función con punto y coma: solo le adelanta al compilador cómo se llama y qué recibe.
Reto

Tu primera función.

1
Crea reto.c con un main que imprima tu Hola, mundo
2
Escribe int cuadrado(int n)Debe devolver n multiplicado por n.
3
Llámala desde main con el número que quierasImprímelo con printf("%d\n", …).
4
Compila, ejecuta y rompe algo a propósitoQuita un punto y coma o mueve la función debajo de main. Lee el error.
reto.c
$ gcc reto.c && ./a.out Hola, mundo 49
Ejemplo con n = 7
El mensaje de hoy

Tu computadora no te entiende.
Un compilador sí lo intenta.

Cada programa de este deck se compiló y se ejecutó antes de llegar a esta sala. Ahora te toca a ti.
Gracias
Walter Rosales
CEO & Co-Founder iGalenus
walter.rosales@igalenus.com
@walterr_rosales
https://walter-rosales.com
walter-rosales.com