În multe C++ IDE's și compilatoare, atunci când generează funcția principală pentru tine, se pare ca acest lucru:
int main(int argc, char *argv[])
Când am cod C++ fără un IDE, doar cu un command line compiler, tip I:
int main()
fără parametri. Ce înseamnă acest lucru, și este vital pentru programul meu?
argv
și argc
cum sunt argumente în linia de comandă sunt transmise `main () în C și C++.
argc
va fi numărul de siruri de caractere indicat de argv
. Acest lucru va (în practică) 1 plus numărul de argumente, ca aproape toate implementarile va adauga numele de programul de la matrice.
Variabilele sunt nume argc
(argument conta) și argv
(argument vector) prin convenție, dar ele pot fi date în orice identificator valid: int main(int num_args, char** arg_strings)
este la fel de valabil.
Ele pot fi, de asemenea, omise în totalitate, obținându-se int main()
, dacă nu intenționați să proceseze argumente în linia de comandă.
Încercați următorul program:
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Have " << argc << " arguments:" << std::endl;
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << std::endl;
}
}
Rulează-l cu ./test a1 b2 c3
va de ieșire
Have 4 arguments:
./test
a1
b2
c3
argc
este numărul de argumente fiind trecut în program din linia de comandă și argv
este o serie de argumente.
Puteți bucla prin argumente știind numărul lor, cum ar fi:
for(int i = 0; i < argc; i++)
{
// argv[i] is the argument at index i
}
Să presupunem că executați programul astfel (folosind " sh " sintaxa):
myprog arg1 arg2 'arg 3'
Dacă ți-ai declarat principalul ca int main(int argc, char *argv[])
, apoi (în cele mai multe medii), ta `main () va fi numit ca:
p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));
Cu toate acestea, dacă ați declarat dvs. principal ca int main()
, acesta va fi numit ceva de genul
exit(main());
și tu nu't obține argumente trecut.
Alte două lucruri de reținut:
*argv [] " și "**argv
sunt exact echivalente, astfel încât să puteți scrie int main(int argc, char *argv []) " ca " int main(int argc, char **argv)
.Parametrii de "principal" reprezintă parametrii de linie de comandă prevăzute la program când a fost început. Anii argc
parametru reprezintă numărul de argumente în linia de comandă, și char *argv[]
este o matrice de siruri de caractere (caractere pointeri) reprezentând individuale argumentele oferite pe linia de comandă.
int main();
Aceasta este o simplă declarație. Ea nu poate lua orice argumente în linia de comandă.
int main(int argc, char* argv[]);
Această declarație este utilizată atunci când programul trebuie să aibă argumente în linia de comandă. Când fugi ca atare:
myprogram arg1 arg2 arg3
argc
, sau Argument Conta, va fi setat la 4 (patru argumente), și argv
, sau Argument Vectori, vor fi populate cu șir de indicii pentru a "myprogram", "arg1", "arg2", și "arg3". Programul de invocare (myprogram
) este inclus în argumente!
Alternativ, ai putea folosi:
int main(int argc, char** argv);
Acest lucru este, de asemenea, valabil.
Acolo este un alt parametru puteți adăuga:
int main (int argc, char *argv[], char *envp[])
Anii envp
parametru conține, de asemenea, variabile de mediu. Fiecare intrare cum urmează acest format:
VARIABLENAME=VariableValue
astfel:
SHELL=/bin/bash
Variabilele de mediu lista este null-terminate.
IMPORTANT: NU utilizați orice argv
sau envp valorile direct în apeluri de sistem()
! Aceasta este o mare gaura de securitate ca malware utilizatorii pot seta variabilele de mediu la linia de comandă comenzi și (potențial) provoca daune masive. În general, doar don't folosi sistemul()`. Există aproape întotdeauna o soluție mai bună aplicare prin biblioteci C.
"Principală" funcție poate avea doi parametri, argc " si " argv
. argc
este un număr întreg (int
) parametru, și acesta este numărul de argumente trecut la program.
Numele programului este întotdeauna primul argument, deci nu va fi cel puțin un argument pentru un program și valoarea minimă a argc
va fi unul. Dar dacă un program are în sine două argumente valoarea de argc
va fi de trei.
Parametru argv
puncte la un șir de matrice și este numit argument vector. Acesta este un one-dimensional matrice de șiruri de argumentele funcției.
Atât de
int main(int argc, char *argv[]);
int main();
sunt definiții legale de punctul de intrare pentru un C sau C++ program. Stroustrup: C++ Stil și Tehnică FAQ detalii despre unele dintre modificările care sunt posibile sau juridice pentru funcția de principal.