Borland C++ palaiko tris pagrindinius () argumentus. Pirmieji du yra tradiciniai argc ir argv. Tai vieninteliai argumentai pagrindines funkcijas(), apibrėžtas ANSI C standarto. Jie leidžia programai perduoti komandinės eilutės argumentus. Komandinės eilutės argumentai yra informacija po programos pavadinimo komandinė eilutė Operacinė sistema. Pavyzdžiui, kai programa kompiliuojama naudojant Borland eilutinį kompiliatorių, paprastai įvedamas bcc programos_pavadinimas
Kur programos_pavadinimas yra programa, kurią reikia sudaryti. Programos pavadinimas perduodamas kompiliatoriui kaip argumentas.
Argc parametre yra komandinės eilutės argumentų skaičius ir jis yra sveikasis skaičius. Jis visada yra bent 1, nes programos pavadinimas yra pirmasis argumentas. Argv parametras yra žymeklis į simbolių rodyklių masyvą. Kiekvienas šio masyvo elementas nurodo komandinės eilutės argumentą. Visi komandinės eilutės argumentai yra eilutės. Visus skaičius programa konvertuoja į vidinį formatą. Ši programa išspausdina „Hello“, po kurio nurodomas vartotojo vardas, jei įvedamas iškart po programos pavadinimo:
#įtraukti
{
if(argc!=2)
{
printf("Pamiršote įvesti savo vardą\n");
grąžinti 1;
}
printf ("Sveiki, %s", argv);
grąžinti 0;
}
Jei paskambins šią programą vardą, o vartotojo vardas yra Sergejus, tada norėdami paleisti programą turite įvesti:
vardas Sergejus.
Programos rezultatas bus:
Sveikas Sergejus.
Komandinės eilutės argumentai turi būti atskirti tarpais arba skirtukais. Kableliai, kabliataškiai ir panašūs simboliai nelaikomi skyrikliais. Pavyzdžiui:
Susideda iš trijų eilučių, o
Herbas, Rikas, Fredas
Tai viena eilutė – kableliai nėra skiriamieji ženklai.
Jei eilutę, kurioje yra tarpų arba tabuliavimo ženklų, norite perduoti kaip vieną argumentą, įtraukite ją dvigubos kabutės. Pavyzdžiui, tai yra vienas argumentas:
"čia testas"
Svarbu teisingai deklaruoti argv. Labiausiai paplitęs metodas yra:
Tušti skliaustai rodo, kad masyvo ilgis nėra fiksuotas. Atskirus elementus galite pasiekti naudodami argv indeksavimą. Pavyzdžiui, argv nurodo pirmąją eilutę, kurioje visada yra programos pavadinimas. argv nurodo kitą eilutę ir pan.
Žemiau pateikiamas nedidelis komandinės eilutės argumentų naudojimo pavyzdys. Jis skaičiuoja atgal nuo komandinėje eilutėje nurodytos vertės ir siunčia signalą, kai pasiekiamas nulis. Atkreipkite dėmesį, kad pirmame argumente yra skaičius, konvertuotas į sveikąjį skaičių naudojant standartinę atoi() funkciją. Jei eilutė "rodymas" yra kaip antrasis argumentas, tada ekrane bus rodomas pats skaitiklis.
/* skaičiavimo programa */
#įtraukti
#įtraukti
#įtraukti
int main(int argc, char *argv)
{
int disp, count;
if(argc<2)
{
printf("Turite įvesti skaičiavimo ilgį\n");
printf("komandinėje eilutėje. Bandykite dar kartą.\n");
grąžinti 1;
}
if (argc==3 && !strcmp(argv,"display")) disp = 1;
kitaip disp = 0;
for(count=atoi(argv); count; -count)
if (disp) printf ("%d", skaičius);
printf("%c", "\a"); /* daugelyje kompiuterių tai skambutis */
grąžinti 0;
}
Atminkite, kad jei argumentai nenurodyti, pasirodo klaidos pranešimas. Tai labiausiai būdinga programoms, kurios naudoja komandinės eilutės argumentus, kad pateiktų instrukcijas, jei buvo bandoma paleisti programą be teisingos informacijos.
Norėdami pasiekti atskirus komandinės eilutės simbolius, pridėkite antrą indeksą prie argv. Pavyzdžiui, ši programa spausdina visus argumentus, su kuriais ji buvo iškviesta, po vieną simbolį:
#įtraukti
int main(int argc, char *argv)
{
int t, i;
for(t=0; t
i = 0;
while(argv[t][i])
{
printf("%c", argv[t][i]);
}
printf(");
}
grąžinti 0;
}
Reikia atsiminti, kad pirmasis indeksas skirtas prieigai prie eilutės, o antrasis – prieigai prie eilutės simbolio.
Paprastai argc ir argv naudojami šaltinio komandoms gauti. Teoriškai galite turėti iki 32767 argumentų, tačiau dauguma operacinių sistemų net neleidžia prie to priartėti. Paprastai šie argumentai naudojami nurodyti failo pavadinimą arba parinktis. Komandinės eilutės argumentų naudojimas suteikia programai profesionalų išvaizdą ir leidžia programą naudoti paketiniuose failuose.
Jei įtraukiate WILDARGS.OBJ failą, pateiktą su Borland C++, *.EXE tipo argumentuose galite naudoti pakaitos simbolius. (Borland C++ automatiškai apdoroja šablonus ir atitinkamai padidina argc.) Pavyzdžiui, jei prijungiate WILDARGS.OBJ prie šios programos, ji išspausdins, kiek failų atitinka komandinėje eilutėje nurodytą failo pavadinimą:
/* Susiekite šią programą su WILDARGS.OBJ */
#įtraukti
int main(int argc, char *argv)
{
registruotis int i;
printf ("%d failai atitinka nurodytą pavadinimą\n", argc-1);
printf("Jie yra: ");
for(i=1; i
grąžinti 0;
}
Jei šią programą pavadinsime WA, paleiskite ją taip, gausime failų, turinčių EXE plėtinį, skaičių ir šių failų pavadinimų sąrašą:
Be argc ir argv, Borland C++ taip pat pateikia trečiąjį komandinės eilutės argumentą -env. Parametras env leidžia programai pasiekti informaciją apie operacinės sistemos aplinką. Parametras env turi sekti argc ir argv ir deklaruojamas taip:
Kaip matote, env deklaruojamas taip pat kaip argv. Kaip ir argv, tai yra žymeklis į eilučių masyvą. Kiekviena eilutė yra aplinkos eilutė, kurią apibrėžia operacinė sistema. Parametras env neturi atitikmens argc parametrui, kuris nurodo, kiek aplinkos eilučių yra. Vietoj to, paskutinė aplinkos eilutė yra nulinė. Ši programa spausdina visas aplinkos eilutes, kurios šiuo metu yra apibrėžtos operacinėje sistemoje:
/* ši programa spausdina visas aplinkos eilutes */
#įtraukti
int main (int argc, char * argv, char * env)
{
int t;
for(t=0; env[t]/t++)
printf("%s\n", env[t]);
grąžinti 0;
}
Atminkite, kad nors argc ir argv programa nenaudoja, jie turi būti parametrų sąraše. C nežino parametrų pavadinimų. Vietoj to, jų naudojimas nustatomas pagal parametrų deklaravimo tvarką. Tiesą sakant, parametrą galite vadinti kaip tik norite. Kadangi argc, argv ir env yra tradiciniai pavadinimai, geriausia juos naudoti toliau, kad kiekvienas, skaitantis programą, akimirksniu atpažintų, jog tai yra pagrindinės () funkcijos argumentai.
Programoms įprasta užduotis yra rasti reikšmę, apibrėžtą aplinkos eilutėje. Pavyzdžiui, PATH eilutės turinys leidžia programoms naudoti paieškos kelius. Šioje programoje parodyta, kaip rasti eilutes, deklaruojančias standartinius paieškos kelius. Jis naudoja standartinę bibliotekos funkciją strstr(), kuri turi tokį prototipą:
Char *strstr(const char *str1, const char *str2);
Funkcija strstr() ieško eilutės, į kurią nurodo str1, eilutėje, į kurią nukreipia str2. Jei tokia eilutė randama, grąžinama rodyklė į pirmąją poziciją. Jei atitikmens nerasta, funkcija grąžina NULL.
/* programa aplinkos eilutėse ieško eilutės, kurioje yra PATH */
#įtraukti
#įtraukti
int main (int argc, char *argv, char *env)
{
int t;
for(t=0; env[t]; t++)
{
if(strstr(env[t], "PATH"))
printf("%s\n", env[t]);
}
grąžinti 0;
}
Kuriant konsolės programą C++ programavimo kalba, automatiškai sukuriama labai panaši eilutė:
int main(int argc, char* argv) // main() funkcijos parametrai
Ši eilutė yra pagrindinės funkcijos main() antraštė, parametrai argс ir argv deklaruojami skliausteliuose. Taigi, jei programa vykdoma per komandinę eilutę, tada į šią programą galima perkelti bet kokią informaciją, tam yra argc ir argv parametrai. Argc parametras yra int duomenų tipo ir apima pagrindinei funkcijai perduotų parametrų skaičių. Be to, argc visada yra bent 1, net kai neperduodame jokios informacijos, nes funkcijos pavadinimas laikomas pirmuoju parametru. Argv parametras yra masyvas rodyklių į eilutes. Per komandinę eilutę galima perduoti tik eilutės tipo duomenis. Rodyklės ir eilutės yra dvi didelės temos, kurioms sukurti atskiri skyriai. Taigi bet kokia informacija perduodama per parametrą argv. Sukurkime programą, kurią paleisime per Windows komandinę eilutę ir perduosime jai tam tikrą informaciją.
// argc_argv.cpp: nurodo konsolės programos įėjimo tašką. #include "stdafx.h" #include // kodas Code::Blocks // Dev-C++ kodas // argc_argv.cpp: nurodo konsolės programos įėjimo tašką. #įtraukti Suderinę programą, atidarykite Windows komandų eilutę ir vilkite mūsų programos vykdomąjį failą į komandų eilutės langą, komandų eilutėje bus rodomas visas programos kelias (bet kelią į programą galite įrašyti ir rankiniu būdu), po to kad galite paspausti ENTER ir programa prasidės (žr. 1 pav.). 1 pav. Pagrindinės funkcijos parametrai Kadangi mes ką tik paleidome programą ir neperdavėme jai jokių argumentų, pasirodė pranešimas Not arguments. 2 paveiksle parodytas tos pačios programos paleidimas per komandinę eilutę, tačiau jai perduodamas argumentas Open. 2 pav. Pagrindinės funkcijos parametrai Argumentas yra žodis Open , kaip matote iš paveikslo, šis žodis pasirodė ekrane. Galite vienu metu perduoti kelis parametrus, atskirdami juos kableliu. Jei reikia perduoti parametrą, susidedantį iš kelių žodžių, tada jie turi būti įterpti į dvigubas kabutes, o tada šie žodžiai bus laikomi vienu parametru. Pavyzdžiui, paveikslėlyje parodytas programos paleidimas, perduodamas argumentas, susidedantis iš dviejų žodžių - Tai veikia . 3 pav. Pagrindinės funkcijos parametrai Ir jei pašalinsite kabutes. Tada matysime tik žodį Tai. Jei paleisdami programą neplanuojate perduoti jokios informacijos, tuomet galite pašalinti argumentus funkcijoje main(), taip pat galite pakeisti šių argumentų pavadinimus. Kartais yra argc ir argv parametrų modifikacijos, tačiau viskas priklauso nuo kuriamos programos tipo arba nuo kūrimo aplinkos. Automatiškai kuriant konsolės programą C++ programavimo kalba, automatiškai sukuriama pagrindinė funkcija, labai panaši į šią: int main (int argc, char * argv) Funkcijos antraštėje yra pagrindinės funkcijos main() parašas su argumentais argc ir argv . Kai paleidžiate programą naudodami „Windows“ komandinę eilutę, galite jai perduoti tam tikrą informaciją. Tokiu atveju komandų eilutė atrodys taip: Komandų eilutės argumentai atskiriami vienu ar daugiau tarpų. Argumente argv yra pilnas programos pavadinimas: #įtraukti cout<< argv << endl; grąžinti 0; Vykdymo rezultatas Pavyzdys: dviejų sveikųjų skaičių sandaugos apskaičiavimas #įtraukti Int a = 0, b = 0; Jei (argc > 1) a = StrToInt(argv); Jei (argc > 2) b = StrToInt(argv); cout<< a <<«*»
<< b << «= «
<< a*b << endl; grąžinti 0; Programa paleidžiama kaip Vykdymo rezultatas Norėdami perduoti komandinės eilutės argumentus derindami programą, turite pasiekti meniu Savybės projektą. Kai paleisite programą derinimo režimu, įvesti argumentai bus traktuojami kaip komandinės eilutės argumentai. Galite perduoti tam tikrus argumentus C programoms. Kai skaičiavimo pradžioje iškviečiamas main(), jam perduodami trys parametrai. Pirmasis iš jų nustato komandų argumentų skaičių pasiekiant programą. Antrasis yra ženklų masyvas, rodantis simbolių eilutes, kuriose yra šie argumentai (vienoje eilutėje yra vienas argumentas). Trečiasis taip pat yra rodyklių į simbolių eilutes masyvas, naudojamas operacinės sistemos parametrams (aplinkos kintamiesiems) pasiekti. Bet kuri tokia eilutė vaizduojama taip: kintamasis = reikšmė\0 Paskutinę eilutę galima rasti dviem nuliais. Pavadinkime pagrindinius () funkcijos argumentus atitinkamai: argc, argv ir env (galimi ir kiti pavadinimai). Tada leidžiami šie aprašymai: pagrindinis (int argc, char * argv) pagrindinis (int argc, char * argv, char * env) Tarkime, kad diske A: yra kokia nors programa prog.exe. Aptarkime tai taip: A:\>prog.exe failas1 failas2 failas3 Tada argv yra žymeklis į eilutę A:\prog.exe, argv yra žymeklis į eilutę file1 ir pan. Pirmąjį faktinį argumentą nurodo argv, o paskutinį – argv. Jei argc=1, tada komandinėje eilutėje po programos pavadinimo parametrų nėra. Mūsų pavyzdyje argc=4. Rekursija yra iškvietimo metodas, kai funkcija iškviečia save. Svarbus momentas rengiant rekursinę programą yra išėjimo organizavimas. Čia lengva padaryti klaidą, kad funkcija nuolatos vadinsis neribotą laiką. Todėl rekursinis procesas turi žingsnis po žingsnio supaprastinti problemą, kad galiausiai atsirastų nerekursyvus sprendimas. Rekursijos naudojimas ne visada yra pageidautinas, nes tai gali sukelti krūvos perpildymą. Programavimo sistemose bendrų problemų sprendimo paprogramės jungiamos į bibliotekas. Šios užduotys apima: matematinių funkcijų skaičiavimą, duomenų įvedimą/išvedimą, eilučių apdorojimą, sąveiką su operacinės sistemos įrankiais ir kt. Bibliotekos rutinų naudojimas išsaugo vartotoją nuo būtinybės kurti atitinkamus įrankius ir suteikia jam papildomą paslaugą. Į bibliotekas įtrauktos funkcijos pateikiamos kartu su programavimo sistema. Jų deklaracijos pateikiamos *.h failais (tai vadinamieji įtraukti arba antraštės failai). Todėl, kaip minėta aukščiau, programos su bibliotekos funkcijomis pradžioje turėtų būti tokios eilutės: #įtraukti<включаемый_файл_типа_h> Pavyzdžiui: #įtraukti Taip pat yra galimybių išplėsti ir kurti naujas bibliotekas su vartotojo programomis. Visuotiniams kintamiesiems priskiriama fiksuota vieta atmintyje programos veikimo laikui. Vietiniai kintamieji saugomi krūvoje. Tarp jų yra atminties sritis dinaminiam paskirstymui. Funkcijos malloc () ir free () naudojamos dinamiškai paskirstyti laisvą atmintį. Funkcija malloc () paskirsto atmintį, funkcija free () ją atlaisvina. Šių funkcijų prototipai saugomi stdlib.h antraštės faile ir atrodo taip: void *malloc(dydis_t dydis); void *free(void *p); Funkcija malloc() grąžina void tipo rodyklę; norint tinkamai naudoti, funkcijos reikšmė turi būti konvertuota į atitinkamo tipo rodyklę. Sėkmės atveju funkcija grąžina žymeklį į pirmąjį laisvos atminties baitą. Jei neužtenka atminties, grąžinama reikšmė 0. Operacija sizeof() naudojama norint nustatyti kintamajam reikalingų baitų skaičių. Šių funkcijų naudojimo pavyzdys: #įtraukti #įtraukti p = (int *) malloc(100 * sizeof(int)); /* Paskirstykite atmintį 100 sveikieji skaičiai */ printf("Pritrūko atminties\n"); už (i = 0; i< 100; ++i) *(p+i) = i; /* Использование
памяти */ už (i = 0; i< 100; ++i) printf("%d", *(p++)); laisvas(p); /* Laisva atmintis */ Prieš naudodami malloc() grąžintą žymeklį, turite įsitikinti, kad yra pakankamai atminties (rodyklė nėra nulinė). Pirminis procesorius C išankstinis procesorius yra programa, kuri apdoroja kompiliatoriaus įvestį. Pirminis procesorius žiūri į šaltinio programą ir atlieka šiuos veiksmus: sujungia su ja duotus failus, atlieka pakaitalus, taip pat tvarko kompiliavimo sąlygas. Pirminis procesorius skirtas programos eilutėms, kurios prasideda simboliu #. Vienoje eilutėje leidžiama tik viena komanda (išankstinio procesoriaus direktyva). direktyvą #define identifikatoriaus pakeitimas dėl to toliau pateiktame programos tekste pavadintas identifikatorius pakeičiamas pakeitimo tekstu (atkreipkite dėmesį, kad šios komandos pabaigoje nėra kabliataškio). Iš esmės ši direktyva įveda makrokomandos apibrėžimą (makrokomandą), kur "identifikatorius" yra makrokomandos apibrėžimo pavadinimas, o "pakeitimas" yra simbolių seka, kuria pirminis procesorius pakeičia nurodytą pavadinimą, kai jį randa programos tekste. Makrokomandos pavadinimas dažniausiai rašomas didžiosiomis raidėmis. Apsvarstykite pavyzdžius: Pirmoje eilutėje programa pakeičia identifikatorių MAX konstanta 25. Antroji leidžia tekste naudoti vietoj įžanginio riestinio skliausto (() žodį BEGIN. Atkreipkite dėmesį, kad kadangi išankstinis procesorius netikrina simbolinių makrokomandų apibrėžimų pavadinimų ir konteksto, kuriame jie naudojami, suderinamumo, rekomenduojama tokius identifikatorius apibrėžti ne su #define direktyva, o su const raktiniu žodžiu su aiškiu tipu. nuoroda (tai labiau tinka C ++): const int MAX = 25; (tipo int galima praleisti, nes jis nustatytas pagal numatytuosius nustatymus). Jei #define direktyva atrodo taip: #define identifikatorius (identifikatorius, ..., identifikatorius) pakeitimas ir tarp pirmojo identifikatoriaus ir pradinio skliausto nėra tarpo, tai yra makrokomandos pakeitimo apibrėžimas su argumentais. Pavyzdžiui, pasirodžius tokiai linijai kaip: #define READ(val) scanf("%d", &val) teiginys READ(y); yra traktuojamas taip pat kaip scanf("%d",&y);. Čia val yra argumentas, o makrokomandos pakeitimas atliekamas argumentu. Jei pakeitime yra ilgi apibrėžimai, kurie tęsiasi kitoje eilutėje, kitos tęstinės eilutės pabaigoje dedamas simbolis \. Makrokomandos apibrėžime galite įdėti objektus, atskirtus ## simboliais, pavyzdžiui: #apibūdinti PR(x, y) x##y Po to PR(a, 3) pakvies a3. Arba, pavyzdžiui, makrokomandos apibrėžimas #apibūdinkite z(a, b, c, d) a(b##c##d) pakeis z(sin, x, +, y) į sin(x+y). # simbolis, esantis prieš makrokomandos argumentą, rodo, kad jis konvertuojamas į eilutę. Pavyzdžiui, po direktyvos #define PRIM(var) printf(#var"= %d", var) sekantį programos teksto fragmentą konvertuojamas taip: printf("metai""= %d", metai); Apibūdinkime kitas pirminio procesoriaus direktyvas. #include direktyva buvo matyta anksčiau. Jis gali būti naudojamas dviem formomis: #include "failo pavadinimas" #įtraukti<имя файла> Abiejų komandų poveikis yra į programą įtraukti failus nurodytu pavadinimu. Pirmasis įkelia failą iš dabartinio katalogo arba katalogo, nurodyto kaip priešdėlis. Antroji komanda ieško failo standartinėse programavimo sistemoje apibrėžtose vietose. Jei failas, kurio pavadinimas parašytas dvigubomis kabutėmis, nurodytame kataloge nerastas, paieška bus tęsiama pakatalogiuose, nurodytuose komandai #include<...>. #include direktyvos gali būti įdėtos viena į kitą. Kita direktyvų grupė leidžia pasirinktinai kompiliuoti programos dalis. Šis procesas vadinamas sąlyginiu kompiliavimu. Į šią grupę įeina direktyvos #if, #else, #elif, #endif, #ifdef, #ifndef. Pagrindinė #if direktyvos forma yra: #if pastovus_išraiškos teiginys_seka Čia patikrinama pastovios išraiškos reikšmė. Jei teisinga, tada duota sakinių seka vykdoma, o jei klaidinga, tada ši teiginių seka praleidžiama. #else direktyvos veiksmas yra panašus į komandos else veiksmą C kalba, pavyzdžiui: #jei pastovi_išraiška teiginio_seka_2 Čia, jei pastovi išraiška yra teisinga, tada vykdoma seka_operatorių_1, o jei klaidinga, vykdoma seka_operatorių_2. #elif direktyva reiškia „else if“ tipo veiksmą. Pagrindinė jo naudojimo forma yra tokia: #jei pastovi_išraiška teiginio_seka #elif pastovi_išraiška_1 teiginio_seka_1 #elif konstanta_išraiška_n pareiškimų_n seka Ši forma yra panaši į formos C kalbos konstrukciją: if...else if...else if... direktyvą #ifdef identifikatorius nustato, ar nurodytas identifikatorius šiuo metu yra apibrėžtas, t.y. ar jis buvo įtrauktas į #define formos direktyvas. Žiūrėti eilutę #ifndef identifikatorius patikrina, ar nurodytas identifikatorius šiuo metu neapibrėžtas. Po bet kurios iš šių direktyvų gali būti nurodytas savavališkas skaičius teksto eilučių, galinčių turėti teiginį #else (negalima naudoti #elif) ir baigiant eilute #endif. Jei tikrinama sąlyga yra teisinga, visos eilutės tarp #else ir #endif yra ignoruojamos, o jei false, tada eilutės tarp check ir #else (jei nėra žodžio #else, tada #endif). #if ir #ifndef direktyvos gali būti įdėtos viena į kitą. Žiūrėti direktyvą #undef identifikatorius lemia tai, kad nurodytas identifikatorius laikomas neapibrėžtu, t.y. nepakeičiamas. Apsvarstykite pavyzdžius. Trys direktyvos yra šios: patikrinkite, ar identifikatorius WRITE yra apibrėžtas (t.y. buvo #define WRITE... formos komanda), o jei taip, tai WRITE pavadinimas laikomas neapibrėžtu, t.y. nepakeičiamas. direktyvas #define RAŠYTI fprintf patikrinkite, ar WRITE identifikatorius neapibrėžtas, o jei taip, tada vietoj fprintf pavadinimo nustatomas WRITE identifikatorius. #error direktyva parašyta tokia forma: #error error_message Jei tai yra programos tekste, kompiliavimas sustoja ir ekrane rodomas klaidos pranešimas. Ši komanda dažniausiai naudojama derinimo etape. Atminkite, kad klaidos pranešimo nereikia rašyti dvigubose kabutėse. #line direktyva skirta pakeisti _LINE_ ir _FILE_ kintamųjų reikšmes, apibrėžtas C programavimo sistemoje. Kintamajame _LINE_ yra šiuo metu vykdomos programos eilutės numeris. _FILE_ identifikatorius yra rodyklė į eilutę su kompiliuojamos programos pavadinimu. #line direktyva parašyta taip: #eilutės numeris "failo pavadinimas" Čia skaičius yra bet koks teigiamas sveikasis skaičius, kuris bus priskirtas kintamajam _LINE_, failo pavadinimas yra pasirenkamas parametras, kuris nepaiso _FILE_ reikšmės. #pragma direktyva leidžia perduoti kai kurias instrukcijas kompiliatoriui. Pavyzdžiui, linija rodo, kad C programoje yra surinkimo kalbos eilučių. Pavyzdžiui: Apsvarstykite kai kuriuos visuotinius identifikatorius arba makrokomandų pavadinimus (makrokomandų apibrėžimų pavadinimus). Apibrėžiami penki tokie pavadinimai: _LINE_, _FILE_, _DATE_, _TIME_, _STDC_. Du iš jų (_LINE_ ir _FILE_) jau aprašyti aukščiau. Identifikatorius _DATE_ nurodo eilutę, kurioje saugoma data, kai šaltinio failas buvo išverstas į objekto kodą. Identifikatorius _TIME_ nurodo eilutę, kurioje saugomas laikas, kai šaltinio failas buvo išverstas į objekto kodą. _STDC_ makrokomandos reikšmė yra 1, jei naudojami standartiniai makrokomandų pavadinimai. Priešingu atveju šis kintamasis nebus apibrėžtas. Pasitaiko, kad duomenys į programą perduodami iš komandinės eilutės ją iškvietus. Tokie duomenys vadinami komandinės eilutės argumentais. Tai atrodo taip, pavyzdžiui: ./a.out test.txt ls -lt /home/peter/ Tai iškviečia programas a.out (iš dabartinio katalogo) ir ls (iš to paties katalogo, nurodyto PATH aplinkos kintamajame). Pirmoji programa iš komandinės eilutės gauna vieną žodį - test.txt, antroji - du: -lt ir /home/peter/. Jei programa parašyta C, tada jai paleidus valdymas iš karto perkeliamas į main() funkciją, todėl būtent ji gauna komandinės eilutės argumentus, priskirtus jos kintamiesiems parametrams. Iki šiol apibrėžėme main() funkciją taip, tarsi ji neimtų jokių parametrų ir nieko negrąžintų. Tiesą sakant, C programoje bet kuri funkcija pagal numatytuosius nustatymus (jei niekas daugiau neapibrėžta) grąžina sveikąjį skaičių. Tai galima patikrinti. Jei kodą rašote taip: main() ( printf("Sveiki \n") ; grąžinti 0; ) Tada kompiliavimo metu nebus įspėjimų ar klaidų. Tas pats nutiks, jei parašysime int main() . Tai įrodo, kad numatytoji funkcija grąžina sveikąjį skaičių, o ne nieko (tuščią). Nors tai, ką funkcija grąžina, visada gali būti „nepaisoma“, pavyzdžiui, voidmain() arba float main() . Kai programa iškviečiama iš komandinės eilutės, jai visada perduodama duomenų pora: Atkreipkite dėmesį, kad atsižvelgiama į patį programos pavadinimą. Pavyzdžiui, jei skambutis atrodo taip: ./a.out 12 2 tema Tada pirmasis programos argumentas yra 4, o eilučių masyvas apibrėžiamas kaip ("./a.out", "12", "theme", "2"). Atkreipkite dėmesį į terminologiją, yra tik du programos argumentai (skaičius ir masyvas), bet tiek komandų eilutės argumentų, kiek norite. Komandinės eilutės argumentai yra "verčiami" į programos argumentus (į argumentus į main() funkciją). Tai, kad duomenys perduodami programai, nereiškia, kad funkcija main() turėtų juos gauti. Jei funkcija main() apibrėžta be parametrų, tada komandinės eilutės argumentų pasiekti negalima. Nors niekas netrukdo jų siųsti. Jokia klaida neatsiras. Norint gauti prieigą prie programai perduotų duomenų, jie turi būti priskirti kintamiesiems. Kadangi argumentai iš karto perduodami į main(), jo antraštė turėtų atrodyti taip: Pirmajame kintamajame (n) yra žodžių skaičius, o antrajame kintamajame yra rodyklė į eilučių masyvą. Dažnai antrasis parametras rašomas kaip **arr . Tačiau tai tas pats. Prisiminkite, kad pačiame eilučių masyve kaip elementai yra rodyklės į eilutes. O funkcijoje perduodame žymeklį į pirmąjį masyvo elementą. Išeina taip, kad mes perduodame rodyklę rodyklei, t.y. **arr. Pratimas #įtraukti Jis spausdina žodžių skaičių komandinėje eilutėje, kai ji iškviečiama, ir kiekvieną žodį naujoje eilutėje. Iškvieskite jį be komandinės eilutės argumentų ir su argumentais. Programoje naudojome kintamųjų parametrus argc ir argv. Įprasta naudoti tik tokius pavadinimus, tačiau iš tikrųjų jie gali būti bet kokie. Geriau laikytis šio standarto, kad jūsų programos būtų suprantamesnės ne tik jums, bet ir kitiems programuotojams. Jei turite patirties su GNU/Linux komandų eilute, žinote, kad dauguma komandų turi jungiklius ir argumentus. Pavyzdžiui, peržiūrint katalogų turinį, kopijuojant, perkeliant, kaip argumentai nurodomi failų sistemos objektai, kuriuose vykdoma komanda. Jo įgyvendinimo ypatybės nustatomos naudojant raktus. Pavyzdžiui, komandoje Cp -r ../les_1 ../les_101 cp yra komandos pavadinimas, -r yra jungiklis, o ../les_1 ir ../les_101 yra komandos argumentai. Apskritai dažniausiai paleidžiant programas yra perduodami failų adresai ir programos vykdymo proceso „modifikatoriai“ (tai yra raktai). Parašykime programą, kuri atidaro vartotojo komandinėje eilutėje nurodytus failus rašymui ar papildymui ir ten įrašo (prideda) tą pačią informaciją, kurią vartotojas įveda iš klaviatūros vykdydamas programą: #įtraukti Kodo paaiškinimai:
{…}
Jei programa vykdoma per komandinę eilutę, į šią programą galima perkelti bet kokią informaciją. Tam yra komandinės eilutės argumentai argc ir argv.
Argc parametras yra int tipo ir apima pagrindinei funkcijai perduotų parametrų skaičių. Be to, argc visada yra bent 1, net kai į pagrindinę funkciją neperduodama jokia informacija, nes programos pavadinimas laikomas pirmuoju parametru.
Argv parametras yra masyvas rodyklių į eilutes. Per komandinę eilutę galima perduoti tik eilutės tipo duomenis.
Diskas:\path\name.exe argument1 argument2 ...
naudojant vardų erdvę std;
}
Programa naudoja eilutę į sveikąjį skaičių konvertavimo funkciją StrToInt() iš čia .
naudojant vardų erdvę std;
int StrToInt(char*s) (…)
int main(int argc, char * argv) (
}Programos derinimas naudojant komandinės eilutės argumentus
Skirtuke Konfigūracijos ypatybės -> Derinimas pasirinkti Komandų argumentai ir nustatyti savo vertybes.
rekursija
Bibliotekos funkcijos
Šie duomenys (skaičius ir rodyklė) perduodami programai net tada, kai ji tiesiog iškviečiama vardu, nieko jai neperduodant: ./a.out. Šiuo atveju pirmasis argumentas yra 1, o antrasis argumentas nurodo tik vienos eilutės masyvą (""./a.out").
pagrindinis (int n, char *arr)
Parašykite tokią programą:Praktinė duomenų perdavimo programai svarba