Ce face main
Orice program C++ are exact o funcție main. Când pornești programul, sistemul de operare apelează main, iar programul se termină când main se termină.
main returnează un int: 0 înseamnă „totul a mers bine”, altă valoare înseamnă eroare. Este singura funcție la care poți omite return: dacă ajunge la final fără return, se consideră return 0;.
A doua formă primește argumentele din linia de comandă: argc este numărul lor (inclusiv numele programului), iar argv este tabloul cu textele lor. argv[0] este numele programului.
Parametri
| Parametru | Descriere |
|---|---|
argc |
Numărul de argumente din linia de comandă, inclusiv numele programului (deci cel puțin 1). |
argv |
Tablou de șiruri C (char*) cu argumentele; argv[argc] este întotdeauna nullptr. |
Ce returnează
Codul de ieșire al programului: 0 (sau EXIT_SUCCESS) pentru succes, altă valoare (de exemplu EXIT_FAILURE) pentru eroare.
Exemple
Exemplul 1: Cel mai mic program care afișează ceva
std::println (C++23, din <print>) afișează textul și trece la rândul următor. Lipsa lui return în main este permisă: programul returnează 0.
#include <print>
int main() {
std::println("Salut, lume!");
}
Rezultat
Salut, lume!
Exemplul 2: Argumentele din linia de comandă
Programul a fost pornit fără argumente, deci argc este 1 (doar numele programului) și bucla nu afișează nimic. Rulat cu ./program Ana Iași, ar afișa cele două argumente.
#include <print>
int main(int argc, char* argv[]) {
std::println("Argumente primite: {}", argc - 1);
for (int i = 1; i < argc; ++i) {
std::println("argumentul {}: {}", i, argv[i]);
}
return 0;
}
Rezultat
Argumente primite: 0
Exemplul 3: Codul de ieșire
Valoarea returnată de main poate fi citită din terminal (echo $? în Linux și macOS). Aici programul verifică datele și returnează EXIT_SUCCESS; dacă stocul ar fi negativ, ar returna EXIT_FAILURE (1).
#include <cstdlib>
#include <print>
int main() {
int stoc = 12;
if (stoc < 0) {
std::println("Stoc invalid!");
return EXIT_FAILURE;
}
std::println("Stoc verificat: {} bucăți", stoc);
return EXIT_SUCCESS;
}
Rezultat
Stoc verificat: 12 bucăți
Greșeli frecvente
- Scrii
void main(). Nu este C++ standard:maintrebuie să returnezeint, iar compilatoarele moderne refuză varianta cuvoid. - Apelezi
maindin propriul cod (de exemplu ca să „repornești” programul). Standardul interzice apelarea luimain; folosește o buclă. - Citești
argv[1]fără să verificiargc. Dacă programul a pornit fără argumente,argv[1]estenullptr, iar folosirea lui oprește programul.
Comenzi înrudite
#include: Directivă a preprocesorului care copiază conținutul unui fișier antet în locul ei, ca să poți folosi funcțiile și clasele declarate acolo.return: Încheie funcția curentă și trimite, opțional, o valoare înapoi celui care a apelat-o.namespace: Grupează funcții, clase și variabile sub un nume comun, ca să nu se încurce cu alte nume identice din program sau din biblioteci.using: Aduce nume dintr-un spațiu de nume în locul curent sau creează un nume nou (alias) pentru un tip existent.std::println: Afișează text formatat cu acolade {} și trece pe rândul următor (C++23).std::cout: Afișează text și valori în consolă, cu operatorul <<.