C++ Básicoc++estructurabásicosintaxis

Estructura de un Programa en C++

Aprende la estructura básica de un programa en C++ para programación competitiva

OOI Oaxaca9 de febrero de 20269 min read

Tu primer programa en C++

Imagina que quieres decirle algo a la computadora y que ella te responda. Para eso necesitas hablarle en un idioma que entienda. Ese idioma es C++, y en esta sección aprenderás las primeras "frases" de este lenguaje.

Todo programa en C++ tiene una estructura básica que siempre se repite, como la estructura de una carta: siempre tiene un saludo, un cuerpo y una despedida. Veamos:

#include <iostream>
using namespace std;

int main() {
    cout << "¡Hola, Mundo!" << endl;
    return 0;
}

Este es el programa más famoso del mundo: el "Hola, Mundo". Cuando lo ejecutas, muestra en pantalla el mensaje "¡Hola, Mundo!". Es simple, pero contiene todas las piezas fundamentales de un programa en C++. Vamos a analizarlo pieza por pieza.

Anatomía de un programa C++

1. Las directivas #include: "trayendo herramientas"

#include <iostream>

Esta línea le dice al compilador: "Necesito usar herramientas de entrada y salida". Es como ir a una ferretería antes de empezar un proyecto: necesitas pedir las herramientas que vas a usar.

iostream significa "input/output stream" (flujo de entrada/salida), y nos da acceso a cin (para leer datos) y cout (para mostrar datos).

Las bibliotecas más comunes que usarás son:

Biblioteca¿Qué te da?Analogía
<iostream>cin y cout para leer/escribirUn teléfono para comunicarte
<cmath>Funciones matemáticas como sqrt, powUna calculadora científica
<string>Manejo de textosUn procesador de palabras
<vector>Arreglos que pueden crecerUna lista que se expande
<algorithm>Funciones útiles como sort, min, maxUna caja de herramientas

Para competencias, existe un atajo mágico que incluye TODAS las bibliotecas de una vez:

#include <bits/stdc++.h>

Es como decir "tráeme TODAS las herramientas de la ferretería". Esto solo funciona con el compilador g++ y es exclusivo para competencias (no lo uses en proyectos profesionales).

2. El espacio de nombres: "de dónde vienen mis herramientas"

using namespace std;

Todas las herramientas de C++ viven dentro de una "caja" llamada std (standard). Sin esta línea, cada vez que quieras usar cout, tendrías que escribir std::cout. Es como tener que decir "la llave inglesa de la caja roja" cada vez, en lugar de solo "la llave inglesa" (porque ya dijimos que todas nuestras herramientas vienen de la caja roja).

3. La función main: "donde empieza todo"

int main() {
    // Tu código aquí
    return 0;
}

La función main es el punto de partida de todo programa en C++. Cuando ejecutas tu programa, la computadora busca main y empieza a ejecutar las instrucciones que hay dentro, de arriba a abajo.

  • int indica que la función regresa un número entero.
  • main() es el nombre de la función. Siempre debe llamarse main.
  • { } las llaves encierran el cuerpo de la función (las instrucciones).
  • return 0; le dice al sistema operativo "el programa terminó correctamente". El número 0 significa "sin errores".

4. Las instrucciones: "las acciones del programa"

Dentro de main(), cada línea de instrucción termina con un punto y coma (;). El punto y coma es como el punto al final de una oración: le dice al compilador "aquí termina esta instrucción".

cout << "¡Hola, Mundo!" << endl;   // Instrucción 1
return 0;                           // Instrucción 2

5. Los comentarios: "notas para humanos"

Los comentarios son texto que el compilador ignora completamente. Son notas que tú escribes para recordar qué hace cada parte del código. Es como escribir notas al margen de tu cuaderno.

// Esto es un comentario de una línea.
// El compilador lo ignora.

/*
   Esto es un comentario
   de múltiples líneas.
   Útil para explicaciones largas.
*/

int x = 5;  // También puedes poner comentarios al final de una línea
💡

Los comentarios son tu mejor amigo. Cuando vuelvas a leer tu código después de una semana, los comentarios te recordarán qué estabas pensando. Úsalos generosamente.

El operador de salida: cout

cout (pronunciado "si-aut", de "character output") es la forma de mostrar información en pantalla:

cout << "Hola";           // Muestra texto
cout << 42;               // Muestra un número
cout << 3.14;             // Muestra un decimal
cout << endl;             // Hace un salto de línea

El operador << se llama "operador de inserción". Puedes pensar en cout como una pantalla y << como una flecha que envía cosas a esa pantalla.

Puedes encadenar múltiples valores:

int edad = 15;
cout << "Tengo " << edad << " años" << endl;
// Muestra: Tengo 15 años

Sobre endl vs '\n': Ambos hacen un salto de línea, pero '\n' es más rápido. endl además "vacía el buffer" (forza a que todo se muestre inmediatamente), lo cual es innecesario en competencias y lo hace más lento.

cout << "Línea 1" << endl;   // Más lento (vacía el buffer)
cout << "Línea 2" << '\n';   // Más rápido (solo salto de línea)
cout << "Línea 3\n";         // Equivalente al anterior

Template para competencias

En la sección de Configuración del Entorno ya vimos el template completo. Aquí lo repasamos con una explicación más detallada de cada parte:

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl '\n'
#define pb push_back
#define all(x) (x).begin(), (x).end()

void solve() {
    // Tu solución va aquí
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}

¿Por qué signed main() en lugar de int main()?

Porque usamos #define int long long, que reemplaza TODAS las apariciones de int por long long. Si escribiéramos int main(), se convertiría en long long main(), y eso no es válido. signed main() no se ve afectado por el #define.

Los macros de atajo

#define pb push_back     // v.pb(x) es lo mismo que v.push_back(x)
#define all(x) (x).begin(), (x).end()  // sort(all(v)) es lo mismo que sort(v.begin(), v.end())

Estos macros te ahorran escritura. En competencias, cada segundo cuenta, y escribir push_back 50 veces puede ser tedioso.

Compilación y ejecución

El proceso completo

1. Escribes tu código → archivo.cpp
2. Lo compilas → se crea archivo ejecutable
3. Lo ejecutas → el programa corre

Comandos en la terminal

# Compilar (crear el ejecutable)
g++ -std=c++17 -O2 -Wall programa.cpp -o programa

# Ejecutar
./programa

¿Qué hace cada flag (opción)?

FlagSignificado¿Por qué usarlo?
-std=c++17Usar estándar C++17Acceso a funciones modernas del lenguaje
-O2Optimización nivel 2El programa corre más rápido
-WallMostrar todas las advertenciasTe ayuda a encontrar posibles errores
-o programaNombrar el ejecutable "programa"Si no, se llamará "a.out"

Errores comunes (y cómo solucionarlos)

1. Olvidar el punto y coma

// ❌ Error: falta el punto y coma
cout << "Hola"

// ✅ Correcto
cout << "Hola";

El compilador te dará un error como: expected ';' after expression. Esto significa "esperaba un punto y coma".

2. C++ distingue mayúsculas y minúsculas

// ❌ Error: "Int" no existe, "COUT" no existe
Int main()
COUT << "Hola";

// ✅ Correcto: todo en minúsculas
int main()
cout << "Hola";

En C++, int, Int, INT e iNt son cuatro cosas completamente diferentes. Solo int es la palabra reservada válida.

3. Olvidar incluir bibliotecas

// ❌ Error: no incluyó iostream
int main() {
    cout << "Hola";  // El compilador no sabe qué es "cout"
}

// ✅ Correcto
#include <iostream>
using namespace std;
int main() {
    cout << "Hola";
}

4. Llaves desbalanceadas

// ❌ Error: falta una llave de cierre
int main() {
    cout << "Hola";
// Falta }

// ✅ Correcto
int main() {
    cout << "Hola";
}
⚠️

Cuando el compilador te muestra un error, lee el mensaje cuidadosamente. Te dice el número de línea donde detectó el problema. A veces el error real está una o dos líneas antes de donde el compilador lo señala.

Ejemplo completo: programa que suma dos números

#include <iostream>
using namespace std;

int main() {
    int a, b;          // Declaramos dos variables enteras
    cin >> a >> b;      // Leemos dos números del teclado
    cout << a + b << endl;  // Mostramos su suma
    return 0;
}

Entrada (lo que escribe el usuario):

5 3

Salida (lo que muestra el programa):

8

Paso a paso de lo que ocurre:

  1. int a, b; — Se crean dos "cajitas" en memoria llamadas a y b.
  2. cin >> a >> b; — El programa espera que el usuario escriba dos números. Los guarda en a y b.
  3. cout << a + b << endl; — Calcula a + b (5 + 3 = 8) y lo muestra en pantalla.
  4. return 0; — El programa termina.

Ejercicio de práctica

Escribe un programa que lea el nombre de una persona y la salude.

Entrada: María Salida: ¡Hola, María!

Ver solución
#include <iostream>
#include <string>
using namespace std;

int main() {
    string nombre;         // "string" es el tipo para texto
    cin >> nombre;          // Leemos el nombre
    cout << "¡Hola, " << nombre << "!" << endl;
    return 0;
}

Siguiente paso

Aprende sobre Tipos de Datos y Variables para entender cómo la computadora almacena diferentes tipos de información.