Informática · FCA UNAM

Diseño de algoritmos · 20 oct 2026

Relacionado

  • Programa: dap_c11.c (“Hola Mundo”, para probar que el compilador funciona).
  • Retoma las etapas de compilación que aparecen en da_261013.

Clase sin apunte de pizarrón
Esta clase (junto con otra, en dos laboratorios) trató sobre la instalación de VS Code y gcc. Lo de abajo está escrito con mis palabras a partir de los temas vistos.

Temas

Instalación de VS Code y del compilador

Tutoriales oficiales, según el sistema operativo (cada uno cubre instalar VS Code, el compilador y configurarlos):

SistemaVS CodeCompilador + configuración
WindowsInstalar VS Code en WindowsGCC con MinGW (MSYS2) · MSYS2
Windows (WSL)Instalar VS Code en WindowsGCC en WSL
macOSInstalar VS Code en macOSClang en macOS
LinuxInstalar VS Code en LinuxGCC en Linux

En macOS
El tutorial usa Clang (viene con las Xcode Command Line Tools); en la terminal de macOS el comando gcc suele ser un alias de Clang, y para compilar C funciona igual.
Los tutoriales están en inglés y hablan de C++ (g++); para C se usa gcc en su lugar.

Editor, IDE y compilador: quién hace qué

Son tres cosas distintas y por eso se instalan por separado:

HerramientaQué haceEjemplo
Editor de códigoSirve para escribir el código: colorea la sintaxis, autocompleta, abre varios archivos. No traduce nada.VS Code, Neovim
IDEEditor + compilador + depurador + ejecución, todo en un solo programa.Code::Blocks, Visual Studio
CompiladorTraduce el código fuente a un programa que la computadora puede ejecutar.gcc

Editor vs IDE
Un editor solo edita texto; por sí solo no sabe compilar C. Un IDE ya trae todo integrado y por eso pesa más y es más rígido. VS Code se queda en medio: es un editor, pero con extensiones se acerca a un IDE. Aun así, el compilador (gcc) se instala aparte y VS Code solo lo llama.

¿Qué es un compilador?

Revisar el compilador

Para saber si ya está instalado, abro una terminal y escribo:

gcc --version   # ¿está instalado y qué versión es?
which gcc       # ¿en qué ruta está? (en Windows: where gcc)

Variables de entorno y PATH

echo $PATH        # macOS / Linux
echo %PATH%       # Windows (cmd)

Proceso de compilación

Compilar no es un solo paso: son cuatro etapas encadenadas, y cada una genera un archivo intermedio.

  1. Preprocesador (.c → .i): prepara el código antes de traducirlo. Incluye el contenido de las bibliotecas (#include), sustituye las constantes (#define) y elimina los comentarios.
  2. Compilador (.i → .s): revisa la sintaxis y traduce el código C a lenguaje ensamblador. Aquí es donde aparecen los errores de compilación.
  3. Ensamblador (.s → .o): convierte el ensamblador a código máquina en un archivo objeto.
  4. Enlazador (.o → ejecutable): une el código objeto con las bibliotecas que usa (por ejemplo, la de printf) y produce el programa final.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#e7f5ff","primaryTextColor":"#1a1a1a","primaryBorderColor":"#1c7ed6","secondaryColor":"#f1f3f5","tertiaryColor":"#f1f3f5","textColor":"#1a1a1a","lineColor":"#6b7280","edgeLabelBackground":"#ffffff"}}}%%
flowchart TB
    SRC("Archivo fuente
programa.c") PRE("Preprocesador") CMP("Compilador") ASM("Ensamblador") LNK("Enlazador") EXE("Ejecutable") SRC --> PRE PRE -- "Archivo preprocesado (.i)" --> CMP CMP -- "Código ensamblador (.s)" --> ASM ASM -- "Código objeto (.o)" --> LNK LNK -- "Ejecutable (.exe / a.out)" --> EXE classDef etapa fill:#e6f7e6,stroke:#2e8b47,stroke-width:2px,color:#111 classDef fuente fill:#2e8b47,stroke:#1b5e2f,stroke-width:2px,color:#fff class PRE,CMP,ASM,LNK etapa class SRC,EXE fuente linkStyle default stroke:#9ca3af,stroke-width:2px

Un solo comando hace todo el proceso:

gcc programa.c -o programa
./programa          # ejecutar (en Windows: programa.exe)

Para detenerme en cada etapa y ver el archivo intermedio:

gcc -E programa.c -o programa.i   # solo preprocesa
gcc -S programa.c                 # hasta ensamblador (.s)
gcc -c programa.c                 # hasta código objeto (.o)

Dos tipos de error

  • Error de compilación: el compilador no entiende el código (falta un ;, variable sin declarar). No se genera el ejecutable.
  • Error de enlazado: el código está bien, pero falta una biblioteca o una función que se usa pero nunca se definió.