Glavni argumenti funkcije c. Nekaj ​​podrobnosti o glavni funkciji. Uporaba argumentov ukazne vrstice

Upoštevajte, da ta različica main() nima parametrov. Vendar številni programi zahtevajo nekaj vnosa. Na primer, recimo, da pišete program z imenom Slika, ki vzame sliko kot vhod in nato iz te slike naredi sličico (manjšo različico slike). Kako funkcija Picture ve, katero sliko naj sprejme in obdela? Uporabnik mora programu povedati, katero datoteko naj odpre. To je mogoče storiti na naslednji način:

// Program: Slika #include #vključi int main() ( std::cout<< "Enter name of image-file to create a thumbnail for: "; std::string filename; std::cin >>ime datoteke; // Odprite slikovno datoteko // Ustvarite sličico // Prikažite sličico)

Vendar pa tukaj obstaja potencialna težava. Ob vsakem zagonu bo program čakal na uporabniški vnos. To ni težava, če ročno zaženete program iz ukazne vrstice enkrat na sliko. Ampak to je že problem, če želite delati z velikim številom datotek ali da lahko drug program poganja ta program.

Oglejmo si to podrobneje.

Na primer, želite ustvariti sličice za vse slikovne datoteke, ki se nahajajo v določenem imeniku. Kako narediti? Ta program lahko zaženete tolikokrat, kolikor je slik v imeniku, tako da ročno vnesete vsako ime datoteke. Če pa je slik na stotine, ta pristop, milo rečeno, ne bo preveč učinkovit! Rešitev tukaj je, da napišete program, ki ponavlja vsako ime datoteke v imeniku in vsakič kliče sliko za vsako datoteko.

Zdaj razmislite o primeru, ko imate spletno mesto in želite, da ustvari sličico vsakič, ko uporabnik naloži sliko na spletno mesto. Ta program ne more sprejeti vnosa iz interneta in sledi logično vprašanje: "Kako potem vnesti ime datoteke?" Obstaja rešitev: spletni strežnik samodejno pokliče funkcijo Picture ob vsakem prenosu datoteke.

V obeh primerih želimo, da zunanji program posreduje ime datoteke kot vhod našemu programu, ko se izvaja, namesto da bi slika sama čakala, da uporabnik ročno vnese ime datoteke.

Argumenti ukazne vrstice so neobvezni argumenti niza, ki jih operacijski sistem posreduje programu, ko se zažene. Program jih lahko uporabi kot vnos ali pa jih ignorira. Tako kot parametri za eno funkcijo zagotavljajo podatke za parametre za drugo funkcijo, argumenti ukazne vrstice omogočajo ljudem ali programom, da zagotovijo vhod v program.

Posredovanje argumentov ukazne vrstice

Izvršljive programe je mogoče zagnati v ukazni vrstici s klicem. Če želite na primer zagnati izvršljivo datoteko MyProgram, ki se nahaja v korenskem imeniku pogona C v operacijskem sistemu Windows, morate vnesti:

C:\>Moj program

Če želite posredovati argumente ukazne vrstice v MyProgram, jih boste morali preprosto navesti za imenom izvršljive datoteke:

C:\>MyProgram SomeContent.txt

Zdaj, ko izvajate MyProgram, bo SomeContent.txt na voljo kot argument ukazne vrstice. Program ima lahko več argumentov ukazne vrstice, ločenih s presledki:

C:\>MyProgram SomeContent.txt SomeOtherContent.txt

To deluje tudi z drugimi operacijskimi sistemi, kot je Linux (čeprav bo struktura imenikov drugačna od Windows).

Če izvajate svoj program iz IDE, potem mora vaš IDE zagotoviti način za vnos argumentov ukazne vrstice.

Za uporabnike Visual Studio: Z desno miškino tipko kliknite želeni projekt v Raziskovalcu rešitev in nato izberite "Lastnosti":

Potem "Lastnosti konfiguracije > Odpravljanje napak". Na desni plošči bo vrstica "Ekipni argumenti". Tukaj lahko vnesete argumente ukazne vrstice, ki bodo samodejno posredovani vašemu programu, ko se zažene:

Koda::Blokira uporabnike treba izbrati "Projekt > Nastavi argumente programa":

Uporaba argumentov ukazne vrstice

Zdaj, ko veste, kako posredovati argumente ukazne vrstice programu, je naslednji korak dostop do njih znotraj programa. Za to se uporabi drugačna oblika funkcije main(), ki sprejme dva argumenta (argc in argv), kot sledi:

int main(int argc, char *argv)

Vidite lahko tudi to možnost:

int main(int argc, char** argv)

int main(int argc, char * * argv)

Čeprav sta obe možnosti v bistvu enaki, je priporočljivo uporabiti prvo, saj je bolj intuitivna.

argc (angl. " arg ument c ount" = "število argumentov") je celoštevilski parameter, ki vsebuje število argumentov, posredovanih programu. argc bo vedno vsaj 1, ker je prvi argument vedno ime samega programa. Vsak argument ukazne vrstice, ki ga poda uporabnik, bo povzročil, da se argc poveča za 1.

argv (angleščina " arg ument v alues" = "vrednosti argumentov") je mesto, kjer so shranjene dejanske vrednosti argumentov. Čeprav je deklaracija argv videti nekoliko strašljivo, je to le niz. Dolžina tega niza je argc.

Napišimo kratek program z imenom MyArguments, ki bo izpisal vrednosti vseh argumentov ukazne vrstice:

// Program: MyArguments #include int main(int argc, char *argv) ( std::cout<< "There are " << argc << " arguments:\n"; // Перебираем каждый аргумент и выводим его порядковый номер и значение for (int count=0; count < argc; ++count) std::cout << count << " " << argv << "\n"; return 0; }

// Program: MyArguments

#vključi

int main (int argc, char * argv)

// Preglejte vsak argument in natisnite njegovo zaporedno številko in vrednost

for (int count = 0; count< argc ; ++ count )

std::cout<< count << " " << argv [ count ] << "\n" ;

vrni 0;

Zdaj, ko kličete MyArguments z argumentoma ukazne vrstice SomeContent.txt in 200, bo rezultat naslednji:

Obstajajo 3 argumenti:
0 C:\MojiArgumenti
1SomeContent.txt
2 200

Parameter 0 je pot in ime trenutnega programa. Parametra 1 in 2 tukaj sta argumenta ukazne vrstice, ki smo ju posredovali.

Ravnanje z številskimi argumenti

Argumenti ukazne vrstice so vedno posredovani kot nizi, tudi če je navedena vrednost številska. Če želite uporabiti argument ukazne vrstice kot število, ga boste morali pretvoriti iz niza v število. Na žalost je C++ to nekoliko bolj zapleteno, kot bi moralo biti:

#vključi #vključi #vključi // za std::stringstream #include // za izhod() int main(int argc, char *argv) ( if (argc<= 1) { // В некоторых операционных системах, argv может быть просто пустой строкой, без имени программы // Обрабатываем случай, когда argv может быть пустым или не пустым if (argv) std::cout << "Usage: " << argv << " " << "\n"; else std::cout << "Usage: " << "\n"; exit(1); } std::stringstream convert(argv); // создаём переменную stringstream с именем convert, инициализируя её значением argv int myint; if (!(convert >> myint)) // izvede pretvorbo myint = 0; // če pretvorba ne uspe, nastavite myint na privzeto vrednost std::cout<< "Got integer: " << myint << "\n"; return 0; }

#vključi

#vključi

#vključi // za std::stringstream

#vključi // za izhod()

int main (int argc, char * argv)

če (argc<= 1 )

// V nekaterih operacijskih sistemih je lahko argv preprosto prazen niz brez imena programa

// Obravnava primer, ko je lahko argv prazen ali ni prazen

če (argv [0])

std::cout<< "Usage: " << argv [ 0 ] << " " << "\n" ;

drugače

std::cout<< "Uporaba: " << "\n" ;

izhod(1);


Včasih je pri zagonu programa koristno, da mu posredujemo nekaj informacij. Običajno se te informacije posredujejo main() prek argumentov ukazne vrstice. Argument ukazne vrstice so informacije, ki se vnesejo v ukazno vrstico operacijskega sistema za imenom programa. Na primer, če želite začeti prevajati program, morate v ukazno vrstico po pozivu vnesti nekaj takega:

Kp ime_programa

ime_programa je argument ukazne vrstice; določa ime programa, ki ga nameravate prevesti.

Za sprejem argumentov ukazne vrstice se uporabljata dva posebna vgrajena argumenta: argc in argv. Parameter argc vsebuje število argumentov v ukazni vrstici in je celo število ter je vedno vsaj 1, ker je prvi argument ime programa. In parameter argv je kazalec na niz kazalcev na nize. V tej matriki vsak element kaže na argument ukazne vrstice. Vsi argumenti ukazne vrstice so nizi, zato mora biti v programu, ko je razvit, zagotovljena pretvorba poljubnih števil v želeno dvojiško obliko.

Tukaj je preprost primer uporabe argumenta ukazne vrstice. Na zaslonu se prikažeta beseda Pozdravljeni in vaše ime, ki ju morate podati kot argument ukazne vrstice.

#vključi #vključi int main(int argc, char *argv) ( if(argc!=2) ( printf("Pozabili ste vnesti svoje ime.\n"); exit(1); ) printf("Pozdravljeni %s", argv) ; vrni 0; )

Če ste ta program poklicali z imenom (ime) in je vaše ime Tom, morate za zagon programa v ukazno vrstico vnesti ime Tom. Kot rezultat izvajanja programa se bo na zaslonu pojavilo sporočilo Hello, Tom.

V mnogih okoljih morajo biti vsi argumenti ukazne vrstice ločeni s presledkom ali tabulatorjem. Vejice, podpičja in podobni znaki se ne štejejo za ločila. na primer

Teci Spot, teci

je sestavljen iz treh znakovnih nizov, medtem ko

Eric, Rick, Fred

predstavlja niz z enim znakom - vejice se praviloma ne štejejo za ločila.

Če niz vsebuje presledke, lahko v nekaterih okoljih niz stavite v dvojne narekovaje, da preprečite ustvarjanje več argumentov. Posledično bo celoten niz obravnavan kot en argument. Če želite izvedeti več o tem, kako vaš operacijski sistem nastavi parametre ukazne vrstice, preglejte dokumentacijo svojega operacijskega sistema.

Zelo pomembno je pravilno deklarirati argv. Najpogosteje se to naredi tako:

Char *argv;

Prazni oglati oklepaji označujejo, da ima niz nedoločeno dolžino. Do posameznih argumentov je zdaj mogoče dostopati z indeksiranjem matrike argv. Na primer, argv kaže na prvi niz znakov, ki je vedno ime programa; argv kaže na prvi argument in tako naprej.

Še en majhen primer uporabe argumentov ukazne vrstice je naslednji program, odštevanje. Ta program šteje nazaj, začenši od neke vrednosti (določene v ukazni vrstici) in zapiska, ko doseže 0. Upoštevajte, da je prvi argument, ki vsebuje začetno vrednost, pretvorjen v celoštevilsko vrednost s standardno funkcijo atoi (). Če je drugi argument ukazne vrstice (in če kot argument štejemo ime programa, potem tretji) je vrstica "prikaz" (prikaz), potem bo rezultat štetja (v obratnem vrstnem redu) prikazan na zaslonu.

/* Program za štetje v obratnem vrstnem redu. */ #vključi #vključi #vključi #vključi int main(int argc, char *argv) ( int disp, count; if(argc)<2) { printf("В командной строке необходимо ввести число, с которого\n"); printf("начинается отсчет. Попробуйте снова.\n"); exit(1); } if(argc==3 && !strcmp(argv, "display")) disp = 1; else disp = 0; for(count=atoi(argv); count; --count) if(disp) printf("%d\n", count); putchar("\a"); /* здесь подается звуковой сигнал */ printf("Счет закончен"); return 0; }

Upoštevajte, da če argumenti ukazne vrstice niso podani, bo prikazano sporočilo o napaki. Programi, ki sprejmejo argumente ukazne vrstice, pogosto storijo naslednje: Ko uporabnik zažene te programe, ne da bi vnesel zahtevane informacije, prikažejo navodila, kako pravilno določiti argumente.

Za dostop do posameznega znaka enega od argumentov ukazne vrstice vnesite drugi indeks v argv. Na primer, naslednji program natisne znak za znakom vse argumente, s katerimi je bil poklican:

#vključi int main(int argc, char *argv) ( int t, i; for(t=0; t

Ne pozabite, da prvi indeks argv omogoča dostop do niza, drugi indeks pa dostop do posameznih znakov.

Običajno se argc in argv uporabljata za dajanje začetnih ukazov programu, ki jih bo potreboval ob zagonu. Na primer, argumenti ukazne vrstice pogosto določajo informacije, kot so ime datoteke, možnost ali alternativno vedenje. Uporaba argumentov ukazne vrstice daje vašemu programu "profesionalen videz" in olajša uporabo v paketnih datotekah.

Imeni argc in argv sta tradicionalni, vendar nista obvezni. Ta dva parametra v funkciji main() lahko pokličete, kakor koli želite. Poleg tega lahko nekateri prevajalniki podpirajo dodatne argumente za main(), zato preverite dokumentacijo svojega prevajalnika.

Kadar program ne zahteva parametrov ukazne vrstice, je najpogosteje, da funkcijo main() izrecno deklarirate tako, da nima parametrov. V tem primeru je na seznamu parametrov te funkcije uporabljena ključna beseda void.

Pri ustvarjanju konzolne aplikacije v programskem jeziku C++ se samodejno ustvari vrstica, ki je zelo podobna tej:

Int main(int argc, char* argv) // parametri funkcije main().

Ta vrstica je glava glavne funkcije main(), parametra argс in argv sta navedena v oklepajih. Torej, če zaženete program prek ukazne vrstice, potem je mogoče v ta program prenesti nekaj informacij, za to obstajata parametra argc in argv. Parameter argc ima podatkovni tip int in vsebuje število parametrov, posredovanih glavni funkciji. Poleg tega je argc vedno vsaj 1, tudi če ne posredujemo nobenih informacij, saj je prvi parameter ime funkcije. Parameter argv je niz kazalcev na nize. Skozi ukazno vrstico je mogoče posredovati samo podatke niza. Kazalci in nizi sta dve veliki temi, za kateri so bili ustvarjeni ločeni razdelki. Vse informacije se torej prenašajo prek parametra argv. Razvijmo program, ki ga bomo zagnali prek ukazne vrstice Windows in mu posredovali nekaj informacij.

// argc_argv.cpp: Definira vstopno točko za konzolno aplikacijo. #include "stdafx.h" #include uporaba imenskega prostora std; int main(int argc, char* argv) ( if (argc ><< argv<

// koda Code::Blocks

// Koda Dev-C++

// argc_argv.cpp: Definira vstopno točko za konzolno aplikacijo. #vključi uporaba imenskega prostora std; int main(int argc, char* argv) ( if (argc > 1) // če posredujemo argumente, bo argc večji od 1 (odvisno od števila argumentov) ( cout<< argv<

Ko smo program odpravili, odprite ukazno vrstico Windows in povlecite izvršljivo datoteko našega programa v okno ukazne vrstice. V ukazni vrstici bo prikazana celotna pot do programa (lahko pa pot do programa vnesete ročno ), nato pa lahko kliknete ENTER in program se bo zagnal (glejte sliko 1).

Slika 1 - Parametri glavne funkcije

Ker smo preprosto zagnali program in mu nismo posredovali nobenih argumentov, se je pojavilo sporočilo Not arguments. Slika 2 prikazuje zagon istega programa prek ukazne vrstice, vendar mu posreduje argument Open.

Slika 2 - Parametri glavne funkcije

Argument je beseda Open, kot je razvidno iz slike, se je ta beseda pojavila na zaslonu. Posredujete lahko več parametrov hkrati in jih ločite z vejico. Če morate posredovati parameter, ki je sestavljen iz več besed, morajo biti te v dvojnih narekovajih, nato pa bodo te besede obravnavane kot en parameter. Slika na primer prikazuje zagon programa, ki mu posreduje argument, sestavljen iz dveh besed - Deluje.

Slika 3 - Parametri glavne funkcije

In če odstranite narekovaje. Takrat bomo videli samo besedo It. Če med izvajanjem programa ne nameravate posredovati nobenih informacij, lahko odstranite argumente v funkciji main() in spremenite imena teh argumentov. Včasih pride do sprememb parametrov argc in argv, vendar je vse odvisno od vrste aplikacije, ki se ustvarja, ali od razvojnega okolja.

Pri samodejnem ustvarjanju konzolne aplikacije v programskem jeziku C++ se samodejno ustvari glavna funkcija, ki je zelo podobna tej:

int main(int argc, char * argv)
{…}

Glava funkcije vsebuje podpis glavne funkcije main() z argumentoma argс in argv.
Če zaženete program prek ukazne vrstice, potem je mogoče v ta program prenesti nekaj informacij. Za to obstajata argumenta ukazne vrstice argc in argv.
Parameter argc je tipa int in vsebuje število parametrov, posredovanih glavni funkciji. Poleg tega je argc vedno vsaj 1, tudi če glavni funkciji ni posredovan noben podatek, saj je prvi parameter ime aplikacije.
Parameter argv je niz kazalcev na nize. Skozi ukazno vrstico je mogoče posredovati samo podatke niza.

Ko zaženete program prek ukazne vrstice Windows, mu lahko posredujete nekaj informacij. V tem primeru bo ukazna vrstica videti tako:
Pogon:\pot\ime.exe argument1 argument2 ...

Argumenti ukazne vrstice so ločeni z enim ali več presledki.

Argument argv vsebuje polno ime aplikacije:

#vključi
uporaba imenskega prostora std;

cout<< argv << endl;

Vrni 0;
}

Rezultat izvedbe

Primer: Računanje zmnožka dveh celih števil
Program od tukaj uporablja funkcijo za pretvorbo niza v celo število StrToInt().

#vključi
uporaba imenskega prostora std;
int StrToInt(char *s) (…)
int main(int argc, char * argv) (

Int a = 0, b=0;

Če (argc > 1)

a = StrToInt(argv);

Če (argc > 2)

b = StrToInt(argv);

cout<< a <<«*» << b << «= « << a*b << endl;

Vrni 0;
}

Program se zažene na naslednji način:

Rezultat izvedbe

Odpravljanje napak v programu z argumenti ukazne vrstice

Za posredovanje argumentov ukazne vrstice pri odpravljanju napak v programu morate dostopati do menija Lastnosti projekt.


Na zavihku Lastnosti konfiguracije -> Odpravljanje napak izberite Argumenti ukaza in nastavite njihove vrednosti.

Pri izvajanju programa v načinu za odpravljanje napak bo program vnesene argumente obravnaval kot argumente ukazne vrstice.

Neobvezni in imenovani argumenti

Izbirni argumenti

C# 4.0 uvaja novo funkcijo, ki olajša podajanje argumentov pri klicu metode. To zdravilo se imenuje neobvezni argumenti in vam omogoča, da definirate privzeto vrednost za parameter metode. Ta vrednost bo privzeto uporabljena, če pri klicu metode za parameter ni podan ustrezni argument. Zato za tak parameter ni treba zagotoviti argumenta. Neobvezni argumenti olajšajo klicanje metod, kjer so privzeti argumenti uporabljeni za nekatere parametre. Uporabljajo se lahko tudi kot "bližnjica" oblika preobremenitve metode.

Glavna spodbuda za dodajanje neobveznih argumentov je bila potreba po poenostavitvi interakcije s predmeti COM. Več Microsoftovih objektnih modelov (kot je Microsoft Office) zagotavlja funkcionalnost prek objektov COM, od katerih so bili mnogi napisani že zdavnaj in so zasnovani tako, da sprejemajo neobvezne parametre.

Spodaj je prikazan primer uporabe neobveznih argumentov:

Uporaba sistema; z uporabo System.Collections.Generic; z uporabo System.Linq; z uporabo System.Text; imenski prostor ConsoleApplication1 ( class Program ( // Argumenta b in c sta neobvezna pri klicu static int mySum(int a, int b = 5, int c = 10) ( return a + b + c; ) static void Main() ( int sum1 = mySum(3); int sum2 = mySum(3,12); Console.WriteLine("Sum1 = "+sum1); Console.WriteLine("Sum2 = "+sum2); Console.ReadLine(); ) ) )

Upoštevati je treba, da morajo biti vsi neobvezni argumenti navedeni na desni strani obveznih. Poleg metod lahko neobvezne argumente uporabite v konstruktorjih, indeksatorjih in delegatih.

Ena od prednosti neobveznih argumentov je, da programerju olajšajo obravnavanje kompleksnih klicev metod in konstruktorjev. Navsezadnje je pogosto treba v metodi določiti več parametrov, kot je običajno zahtevano. In v takih primerih lahko nekatere od teh parametrov naredite neobvezne s previdno uporabo neobveznih argumentov. To pomeni, da morate posredovati le tiste argumente, ki so pomembni v danem primeru, in ne vseh argumentov, ki bi bili sicer potrebni. Ta pristop vam omogoča, da racionalizirate metodo in programerju poenostavite rokovanje z njo.

Poimenovani argumenti

Druga funkcija, ki je bila dodana v C# z izdajo .NET 4.0, je podpora za ti imenovani argumenti. Kot veste, mora pri posredovanju argumentov metodi njihov vrstni red praviloma sovpadati z vrstnim redom, v katerem so parametri definirani v sami metodi. Z drugimi besedami, vrednost argumenta je parametru dodeljena na podlagi njegovega položaja na seznamu argumentov.

Poimenovani argumenti so zasnovani tako, da premagajo to omejitev. Poimenovani argument vam omogoča, da določite ime parametra, ki mu je dodeljena njegova vrednost. In v tem primeru vrstni red argumentov ni več pomemben. Tako so imenovani argumenti nekoliko podobni prej omenjenim inicializatorjem objektov, čeprav se od njih razlikujejo po sintaksi. Če želite podati argument po imenu, uporabite naslednjo obliko sintakse:

ime_parametra: vrednost

Tukaj ime_parametra označuje ime parametra, ki mu je vrednost posredovana. Seveda mora biti ime_parametra ime dejanskega parametra za klicano metodo.