Relacionado
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 gcc.
- Revisar que el compilador esté instalado y qué versión es.
- Qué es un compilador.
- Variables de entorno (
PATH). - IDE vs editor de código.
- Proceso de compilación.
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):
| Sistema | VS Code | Compilador + configuración |
|---|---|---|
| Windows | Instalar VS Code en Windows | GCC con MinGW (MSYS2) · MSYS2 |
| Windows (WSL) | Instalar VS Code en Windows | GCC en WSL |
| macOS | Instalar VS Code en macOS | Clang en macOS |
| Linux | Instalar VS Code en Linux | GCC en Linux |
En macOS
El tutorial usa Clang (viene con las Xcode Command Line Tools); en la terminal de macOS el comandogccsuele 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 usagccen su lugar.
Editor, IDE y compilador: quién hace qué
Son tres cosas distintas y por eso se instalan por separado:
| Herramienta | Qué hace | Ejemplo |
|---|---|---|
| Editor de código | Sirve para escribir el código: colorea la sintaxis, autocompleta, abre varios archivos. No traduce nada. | VS Code, Neovim |
| IDE | Editor + compilador + depurador + ejecución, todo en un solo programa. | Code::Blocks, Visual Studio |
| Compilador | Traduce 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?
- La computadora solo entiende código máquina (ceros y unos). C es un lenguaje que los humanos podemos leer, así que hace falta un traductor.
- El compilador traduce todo el programa de una vez y genera un archivo ejecutable. Si hay errores de sintaxis, no lo genera y los muestra.
- Se distingue de un intérprete, que va traduciendo y ejecutando línea por línea (por ejemplo, Python o JavaScript).
- gcc (GNU Compiler Collection) es el compilador de C que usamos en el taller.
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)- Si responde con un número de versión, sí está instalado y la terminal lo encuentra.
- Si responde algo como command not found o no se reconoce el comando, hay dos posibilidades: no está instalado, o está instalado pero la terminal no sabe dónde buscarlo. Eso último lo explican las variables de entorno.
- La versión importa porque cambia qué cosas del lenguaje acepta el compilador.
Variables de entorno y PATH
- Una variable de entorno es un valor con nombre que el sistema operativo guarda y que los programas pueden consultar (por ejemplo, dónde está algo instalado).
- La más importante aquí es
PATH: una lista de carpetas donde el sistema busca los programas cuando escribo un comando en la terminal. - Cuando escribo
gcc, el sistema recorre las carpetas dePATHhasta encontrar un ejecutable que se llamegcc. Si la carpeta donde se instaló no está enPATH, dice que no lo encuentra aunque sí esté instalado. - Por eso, al instalar gcc hay que agregar su carpeta
binalPATH. - Para ver su contenido:
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.
- 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. - Compilador (
.i→.s): revisa la sintaxis y traduce el código C a lenguaje ensamblador. Aquí es donde aparecen los errores de compilación. - Ensamblador (
.s→.o): convierte el ensamblador a código máquina en un archivo objeto. - Enlazador (
.o→ ejecutable): une el código objeto con las bibliotecas que usa (por ejemplo, la deprintf) 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:2pxUn 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ó.