¿Qué es int main() en C++?
Respuesta corta: int main() es el punto de entrada de todo programa C++ — la función que tu sistema operativo llama para empezar a ejecutar tu código. El int es el estado de salida que devuelve cuando el programa termina.
Cuando ejecutas un programa, el sistema operativo no «simplemente corre tu archivo». Lo carga, prepara el terreno y llama a una función que debe llamarse exactamente main — en minúsculas, letra por letra. Lo que pongas en main es lo primero que se ejecuta. Cuando main termina, el programa sale, y el entero que devuelves se convierte en el estado de salida del proceso.
El programa real más pequeño
Ejecútalo y mira la línea bajo la salida — el editor te reporta el código de salida:
#include <iostream>
using namespace std;
int main() {
cout << "The program is running." << endl;
return 0;
}
Qué hace de verdad el valor de retorno
El número que devuelves se lo entrega al sistema operativo. Por convención, 0 significa «todo bien» y cualquier otro valor señala un problema — cuál, lo eliges tú. Las herramientas lo usan: sistemas de build, corredores de tests y scripts de shell revisan el código de salida para decidir si el paso anterior funcionó.
#include <iostream>
using namespace std;
int main() {
cout << "Pretending something went wrong..." << endl;
return 42;
}
En tu propia computadora puedes ver el mismo número: ejecuta el programa compilado y escribe echo $? (Linux/Mac) o echo %ERRORLEVEL% (Windows cmd) — la consola imprime el código que devolvió main.
Las dos firmas estándar
El estándar de C++ admite exactamente dos formas:
int main() // sin argumentos de línea de comandos
int main(int argc, char* argv[]) // con argumentos de línea de comandos
argc(«argument count») es cuántas palabras escribió el usuario tras el nombre del programa.argv(«argument vector») es un array de cadenas con esas palabras;argv[0]es el propio nombre del programa.- Cualquier otra cosa —
void main(),double main(),int Main()— o no es estándar, o es simplemente otra función que nadie llama.
¿Hay que escribir return 0;?
No — main es la única función de C++ que devuelve 0 implícitamente si llegas al final. Muchas guías de estilo lo escriben igual; ambas formas son correctas. En todas las demás funciones, olvidar el return en una función no-void es comportamiento indefinido — no cojas el vicio aquí.
Errores clásicos de principiante
void main()— compila en algunos compiladores, pero no es C++ estándar. Escribeint main(); no cuesta nada y compila en todas partes.Main(),MAIN()— C++ distingue mayúsculas; el sistema operativo buscamaina secas.- Un programa sin
main— todo lo demás compila, y luego el enlazador falla conundefined reference to 'main'ounresolved external symbol main. Ese error significa: no hay punto de entrada. - Dos
mainen un programa — p. ej., dos.cppque cada uno define el suyo. El enlazador lo rechaza: exactamente unmainpor ejecutable.
Seguimientos típicos en entrevistas
- «¿Puede
mainllamarse a sí mismo?» Técnicamente sí (recursión enmaines legal, aunque rara); el programa reinicia su lógica hasta reventar la pila. - «¿Se puede sobrecargar
main?» No — el estándar la fija a las dos formas de arriba. - «¿A dónde va el valor de retorno?» Al estado de salida del proceso, visible para el proceso padre — consolas, herramientas de build, frameworks de test.
- «¿Se ejecuta algo antes de
main?» Sí: los constructores de objetos globales/estáticos. Pregunta favorita para separar a quien leyó C++ de quien lo depuró.
Práctica en el editor
- Escribe un
mainque imprima tu nombre y devuelva7; confirma el código de salida en el panel. - Rómpelo a propósito: renombra
mainaMainy lee el error (en un compilador real es error del enlazador, no del compilador — conviene conocer la diferencia). - Añade otra función, llámala desde
mainy devuelve su resultado.
Siguiente: dentro de main casi siempre hay bucles — mira for vs while en C++ y la lección del Hola Mundo.