main în C++

Funcția cu care începe orice program C++: sistemul o apelează la pornire, iar valoarea returnată spune dacă programul a reușit.

Sintaxă
int main() { ... }
int main(int argc, char* argv[]) { ... }

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: main trebuie să returneze int, iar compilatoarele moderne refuză varianta cu void.
  • Apelezi main din propriul cod (de exemplu ca să „repornești” programul). Standardul interzice apelarea lui main; folosește o buclă.
  • Citești argv[1] fără să verifici argc. Dacă programul a pornit fără argumente, argv[1] este nullptr, 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 <<.