principal) Funcția (
Diferite implementari permit forme suplimentare funcția principală, dar tipul de retur este întotdeauna int. Cel mai adesea al treilea argument este trecut un șir de char * [] de indicii pentru variabile de mediu.
Nume argc și argv poate fi arbitrară, precum și tipul de înregistrare a acestor parametri: int main # 40; int ac, char ** av # 41; este permisă.
[Articolul] Definiții
Funcția principală se numește atunci când programul începe după inițializarea obiectelor non-locale, cu o durată de stocare statică. Acesta este punctul de intrare în program, care este executat într-un mediu de oaspeți (de exemplu, cu sistemul de operare). Punctele de intrare în program independent (incarcator de boot, kernel OS, etc.) depind de punerea în aplicare.
principalii parametri ai funcției în varianta cu doi parametri permit transferul de mediu arbitrar execuție linie multi-octet (comanda de obicei argumente de linie), indicii argv [1]. argv [argc-1] se referă la primele caractere ale acestor șiruri. argv [0] - un pointer la primul șir de caractere terminat mnogobabaytovoy la zero, care cuprinde un nume utilizat atunci când un apel de program (sau un sir gol „“ dacă nu este acceptată în mediul de execuție.). Aceste linii sunt variabile, cu toate că schimbările nu sunt propagate înapoi la mediul de execuție: acestea pot fi utilizate, de exemplu, std :: strtok. Dimensiunea de matrice indicat de argv. este de cel puțin argc + 1. și ultimul element al argv matrice [argc] este garantat pentru a fi nul-pointer.
Funcția principală are următoarele proprietăți speciale:
1) Este nicăieri nu poate fi folosit în program,
a) În special, aceasta nu poate fi numit recursiv;
2) Nu poate fi declarată și nu poate fi supraîncărcat: de fapt, principalul nume este rezervat în spațiul de nume global pentru funcții (deși acest nume poate fi utilizat pentru denumirea de clase, spații de nume, transferuri, precum și orice entitate nu în spațiul de nume la nivel mondial, cu excepția faptului că funcția cu. numit „principal“ nu poate fi declarată cu legarea limbajului C, în orice spațiu de nume (începând cu 17 C ++)).
3) Nu poate fi declarată ca fiind îndepărtată, sau pentru a determina legarea C (pornind de la 17 C ++). inline. statică sau constexpr.
4) Corpul principalelor funcții ale operatorului nu este necesară întoarcere. la sfârșitul funcției principale, fără un efect declarație de returnare va fi la fel ca atunci când efectuează return 0; .
5) Performanța de rentabilitate (sau revenire implicită atunci când sfârșitul funcției principale) este echivalentă cu funcția normală a ieșirii (care distruge obiecte cu durată de viață automată), urmată de provocarea std. ieșire cu același argument care a fost transmis în schimb. (Std. Ieșire distruge obiecte statice și iese din program).
6) În cazul în care funcția este definită ca o funcție-try-bloc principal. excepțiile aruncate de destructori de obiecte statice (care sunt distruse atunci când apelați std :: ieșire), nu sunt capturate funcția.
7) (începând cu funcția principală C ++ 14) Tipul de retur nu poate fi de ieșire (auto principal # 40; # 41; # 123;. # 125; nu este permis).
[Edit] Note
Cum argumentele date de pe linia de comandă sistemul de operare sunt convertite în șiruri de șiruri de mai mulți octeți, care sunt referite de argv. prelucrare linie de comandă definită de implementare: