Kontakty

C používanie hlavného argumentu. Voliteľné a pomenované argumenty. Debugovanie programu s argumentmi príkazového riadku

Tagy: Nastavenia príkazového riadka

Nastavenia príkazového riadka

C a - kompilovaný jazyk. Po montáži je program spustiteľný súbor (nepovažujeme za vytvorenie dynamických knižníc, ovládačov atď.). Naše programy sú veľmi jednoduché a neobsahujú knižnice Runtime (Runtime Knižnice), takže môžu byť prenesené do počítača s rovnakým operačným systémom (a podobnou architektúrou) a beží tam.

Program počas spustenia môže mať parametre. Sú to argumenty hlavnej funkcie. Všeobecný pohľad na hlavnú funkciu Ďalej

Void Main (int Argc, Char ** ARGV) (...)

Prvý argument Argc je počet prenášaných funkcií parametrov. Druhým argumentom je rad reťazcov - samotné parametre sú vlastne. Pretože parametre funkcie môžu byť akékoľvek, potom sa prenášajú ako reťazce a samotný program ich musí demontovať a viesť k požadovanému typu.

Prvý argument (ARGV) je vždy názov programu. V tomto prípade sa názov zobrazí v závislosti od toho, kde bol program spustený.

#Include. #Include. VOID MAIN (INT ARGC, CHAR ** ARGV) (PRINTF ("% S", ARGV);)

Teraz sa naučte pracovať trochu s príkazovým riadkom. Bude potrebný na prenos argumentov nášmu programu. Kombinácia tlačidiel WIN + R volá okno "RUN". Vytočte v IT CMD a otvoríte sa príkazový riadok. V ponuke Štart môžete tiež nájsť vyhľadávanie CMD.EXE. V Unix-Like operačné systémyoh, môžete zavolať program "terminál".

Nebudeme študovať žiadne mnoho tímov. Iba tie, ktoré budú potrebné v práci.

Štandard pre všetky operačné systémy CD CD premieňa požadovaný priečinok. Existujú dva rezervované meno -. (Bod) a .. (dva body). Bod je názov aktuálneho priečinka.

Nie je nikam

Odvolanie na materský priečinok

Prechod na materský priečinok

Pre prechod na požadovanú adresu CD je napísaná. Napríklad musíte ísť do systému Windows do priečinka C: Windows System32

CD C: Windows System32

V Linuxe, ak potrebujete ísť do priečinka / VAR / MYSQL

CD / VAR / MYSQL

Ak cesta obsahuje medzery, je napísané v dvojitých úvodzoch

CD "D: DOCUNTS A NASTAVENIA PROLOK"

Terminál má nasledujúce užitočné funkcie: Ak stlačíte šípku Hore, zobrazí sa predchádzajúci vykonaný príkaz. Ak stlačíte kartu, terminál sa pokúsi pridať reťazec na príkaz, ktorý je známe, alebo pridajte cestu, vypnutie všetkých priečinkov a súborov v aktuálnom priečinku.
Dial CD C: \\ t
Stlačte Tab a zistite, čo sa deje.

Ešte jeden dôležitému tímu RIM V okne Windows a LS na Linuxe zobrazí obsah aktuálneho priečinka do konzoly (priečinok, v ktorom ste v súčasnosti)

Váš program vrátil vaše celé meno. Prejdite do priečinka, kde sa váš program nachádza a pozrite sa na jeho obsah.


Teraz, potom, čo sme sa zmenili do nášho priečinka, môžete vykonať náš program. Ak to chcete urobiť, zadajte jej meno.


Poznámka - názov sa zmenil. Keďže program sa volá z jeho priečinka, zobrazí sa v porovnaní s názvom. Teraz zmeníte program a urobíte to všetky argumenty. ktorí sa na ňu prenesú.

#Include. #Include. Void Main (int Argc, CHAR ** ARGV) (INT I; pre (I \u003d 0; I< argc; i++) { printf("%s\n", argv[i]); } }

Zbierajte projekt. Pred montážou sa uistite, že je program zatvorený. Teraz zavolajte program tým, že prejde rôznymi argumentmi. Ak to chcete urobiť, napíšte názov programu a prostredníctvom priestoru argumentu


Teraz napíšte program, ktorý dostane dve argumenty čísla a zobrazí ich sumu

#Include. #Include. #Include. Void Main (INT ARGC, CHAR ** ARGV) (INT A, B; ak (ARGC! \u003d 3) (Printf ("Chyba: Našiel% D argumenty. Potrebuje presne 2", ARGC-1); výstup (1); ) A \u003d ATOI (ARGV); B \u003d ATOI (ARGV); Printf ("% D", A + B);)

Zbierame a volanie


Väčšina programov teda funguje. Kliknite na štítok, zavoláte program, na ktorý sa vzťahuje. Väčšina programov tiež rôzne argumenty. Môžete napríklad volať prehliadač firefox. Z príkazového riadka a transferových argumentov
Firefox.exe "www.mozilla.org" webu "a on okamžite otvorí stránky v dvoch kartách zadané adresy.

Mnohé štandardné príkazy majú tiež parametre. Je prijatý v systéme Windows, že začínajú s rovným vzhľadom, v Unixu s mínusom alebo dvoma minami. napríklad

Zobrazí iba priečinky av termináli Linux

LS -L Zobrazí všetky súbory a priečinky s atribútmi

Na zobrazenie ďalších windows Príkazy Vytočte príkazový riadok Pomocníka alebo pozrite si príručku (je ľahko dostupné na internete). Pre linuxové tímy a ich možnosti, oveľa viac a niektoré z nich sú nezávislé programovacie jazyky, takže stojí za to, že sa učiť aspoň minimálny súbor a ich možnosti.

Stáva sa to, že údaje v programe sa prenášajú z príkazového riadku, keď sa nazýva. Takéto údaje sa nazývajú argumenty príkazového riadka. Vyzerá to takto, napríklad:

./a.out test.txt ls -lt / home / peter /

Tu sú programy A.OUT (z aktuálneho adresára) a LS (z jedného adresára zadaného v premennej prostredia PATH). Prvý program z príkazového riadka prijíma jedno slovo - test.txt, druhý je dva: -LT a / home / peter /.

Ak je program napísaný v C, potom, keď spustí, kontrolu sa okamžite prenáša na hlavnú funkciu (), preto je to, že dostane argumenty príkazového riadka, ktoré sú priradené k jeho premenným.

Pred tým sme definovali hlavnú () funkciu, ako keby neakceptovala žiadne parametre a nevraca sa nič. V skutočnosti, v jazyku c, akúkoľvek predvolenú funkciu (ak nie je definované nič iné) Vracia celé číslo. Môžete sa uistiť, že sa môžete uistiť. Ak píšete kód týmto spôsobom:

hlavné () (Printf ("Ahoj n "); Návrat 0; )

Že nevzniknú žiadne varovanie ani chyba. To isté bude, ak zaznamenáte Int hlavné (). To dokazuje, že predvolená funkcia vráti celé číslo, a nie nič (neplatné). Hoci to, čo vráti, funkcia môže byť vždy "prepísanie", napríklad, Vidomain () alebo Float ().

Pri volaní programu z príkazového riadka sa vždy prenáša pár údajov:

  1. celé číslooznačuje počet slov (prvky oddelené medzerami) na príkazovom riadku pri volaní,
  2. zOZNAM NA PRAVIDLOCH STROVKde je každý riadok samostatným slovom z príkazového riadka.

Treba mať na pamäti, že sa tiež uvažuje o názve programu. Napríklad, ak hovor vyzerá takto:

./a.out 12 tému 2

Prvým argumentom programu je 4 a pole reťazca je definované ako ("./a.out", "12", "Theme", "2").

Venujte pozornosť terminológii, existujú iba dva argumenty programu (počet a pole), ale akékoľvek argumenty príkazového riadku. Argumenty príkazového riadka sú "prevedené" do argumentov programu (v hlavných () funkčných argumentoch).
Tieto údaje (číslo a ukazovateľ) sa prenášajú do programu, aj keď sa jednoducho nazýva podľa mena bez toho, aby ste na to niečo preniesli: ./ A.OUT. V tomto prípade má prvý argument hodnotu 1, a druhý označuje pole pozostávajúce z jediného riadku ("./a.out").

Skutočnosť, že program je prenášaný do programu, neznamená, že ich funkcia () musí ich prijať. Ak je funkcia hlavnej () definovaná bez parametrov, nie je možné pristupovať k argumentom príkazového riadka. Hoci vám nič nepríjemní, aby ste ich neprešli. Chyby nevzniknú.

Pre prístup k údajom preneseným do programu musia byť priradené k premenným. Keďže argumenty sa okamžite prenášajú na hlavný (), jej názov by mal vyzerať:
Hlavný (Int N, CHAR * ARR)

Prvá premenná (n) obsahuje počet slov av druhom ukazovatele na pole radu. Často je druhý parameter napísaný ako ** Ar. Je to však rovnaké. Pripomeňme si, že samotné pole, obsahuje ukazovatele na čiary ako jej prvky. A vo funkcii vysielame ukazovateľ na prvý prvok poľa. Ukazuje sa, že vysielame ukazovateľ na ukazovateľ, t.j. ** Arr.

Úloha
Napíšte takýto program:

#Include. Int Hlavný (INT ARGC, CHAR ** ARGV) (INT I; PRINTIVOM ("% D n ", argc); pre (i \u003d 0; ja< argc; i++ ) puts (argv[ i] ) ; }

Zobrazí sa počet slov na príkazovom riadku, keď sa nazýva a každé slovo s nový reťazec. Zavolajte ho bez argumentov príkazového riadka as argumentmi.

V programe sme použili argc a argv premenné. Je bežné používať také názvy, ale v skutočnosti môžu byť kedykoľvek. Je lepšie dodržiavať tento štandard, aby vaše programy boli zrozumiteľnejšie nielen pre vás, ale aj iným programátorom.

Praktická hodnota prenosu dát do programu

Ak máte skúsenosti v príkazovom riadku GNU / Linux, viete, že väčšina tímov má kľúče a argumenty. Napríklad pri prezeraní obsahu adresárov, kopírovanie, pohyb ako argumenty, sú uvedené objekty systém súborovNad ktorým sa tím vykonáva. Funkcie jeho vykonania sa určujú pomocou tlačidiel. Napríklad v tíme

Cp -r ../les_1 ../les_101

cP je názov príkazu, -R - kľúč, a ../ les_1 a ../ les_101 - príkazové argumenty.

Vo všeobecnosti sa v programe prenášajú adresy súborov a "modifikátorov" (tieto kľúče) programového procesu.

Budeme napísať program, ktorý otvorí súbory špecifikované užívateľom na príkazovom riadku na nahrávanie alebo pridanie a píše (pridáva) na jednu a rovnakú informáciu, ktorú používateľ zadá z klávesnice počas procesu vykonávania programu:

#Include. #Include. Hlavný (INT ARGC, CHAR ** ARGV) (INT I, CH; FILE * F [5]; IF (ARGC< 3 || argc > 7) (dávky ( "Neplatný počet parametrov"); Návrat 1; ) Ak (STRCMP (ARGV [1], "-W")! \u003d 0 && STRCMP (ARGV [1], "-A")! \u003d 0) (Dávky ( "Prvý parameter môže byť buď -W, alebo -A"); Návrat 2; ) pre (i \u003d 0; ja< argc- 2 ; i++ ) { f[ i] = fopen (argv[ i+ 2 ] , argv[ 1 ] + 1 ) ; if (f[ i] == NULL) { printf ("Súbor% s nie je možné otvoriť n", argv [i + 2]); Návrat 3; )) Kým (((CH \u003d getchar ())! \u003d Eof) pre (i \u003d 0; ja< argc- 2 ; i++ ) putc (ch, f[ i] ) ; for (i= 0 ; i < argc- 2 ; i++ ) fclose (f[ i] ) ; return 0 ; }

Vysvetlenie kódu:

  1. Vytvorí sa pole piatich ukazovateľov súborov. Preto môžete súčasne otvoriť maximálne päť súborov. Ukazovateľ súboru prvého súboru bude uložený v prvom prvku F, druhý - v F, atď.
  2. Skontrolujte sa počet argumentov príkazového riadka. Mali by byť aspoň tri, pretože Prvým je názov programu, druhý - režim otvárania súboru, tretí alebo jediný súbor, v ktorom bude záznam vykonať. Keďže program umožňuje otvoriť iba päť súborov, celkový počet argumentov príkazového riadka nemôže byť viac siedmich. Preto, ak je počet argumentov menší ako 3 alebo viac ako 7, potom je program dokončený, pretože Prevádzkovateľ návratu vedie k výstupu z funkcie, aj keď po ňom je stále kód. Hodnota vrátená z funkcie je nerovnaká 0, môže byť interpretovaný materským procesom ako správu, že program dokončený s chybou.
  3. Skontrolujte správnosť druhého argumentu príkazového riadka. Ak nie je rovná žiadnej "-W", ani "-A", potom podmienený výraz v druhom prípade, ak sa vráti 1 (TRUE). Funkcia STRCMP () vám umožňuje porovnať reťazce a vráti 0, ak sú rovnaké.
  4. Forcycle slučka otvára súbory na zadaných adries, ktoré začínajú tretím prvkom ARGV poľa. To je dôvod, prečo 2 sa pridáva k I, aby ste dostali prvky Argv Array, počnúc treťou. Výraz ARGC-2 indikuje počet prešiel názvov súborov; Pretože ARGC ukladá celkový počet argumentov príkazového riadka, z ktorých prvé dve nie sú názvy súborov.
  5. Expression ARGV + 1 vám umožňuje "rezať" z "-W" reťazca (alebo "-A") podreťazcovania "W" (alebo "A"), pretože Argv je v podstate ukazovateľom na prvý prvok reťazca. Pridanie do ukazovacej jednotky ho posunieme na ďalší prvok poľa.
  6. Ak súbor zlyhá, funkcia FOPEN () vráti null. V tomto prípade je program dokončený.
  7. Každý znak zadaný užívateľom z klávesnice je zapísaný na všetky otvorené súbory.
  8. Na konci sú súbory zatvorené.

Voliteľné a pomenované argumenty

Voliteľné argumenty

Vo verzii C # 4.0, nový nástroj, ktorý zvyšuje pohodlie špecifikácie argumentov pri volaní metódy. Tento nástroj sa nazýva voliteľné argumenty A Umožňuje určiť predvolenú hodnotu pre parameter metódy. Táto hodnota sa použije štandardne, ak je príslušný argument špecifikovaný pre parameter, keď sa nazýva metóda. V dôsledku toho špecifikujte argument pre takýto parameter nie je potrebný. Voliteľné argumenty vám umožňujú zjednodušiť hovor na metódy, kde sa na niektoré parametre uplatňujú predvolené argumenty. Môžu byť tiež použité ako "skrátená" forma metódy preťaženia.

Hlavný podnet na pridanie voliteľných argumentov bolo potreba zjednodušiť interakciu s COM zariadeniami. V niekoľkých modeloch objektov spoločnosti Microsoft (napríklad, Microsoft Office.) Funkčnosť je poskytovaná prostredníctvom COM Zariadenia, z ktorých mnohé boli napísané dávno a sú navrhnuté tak, aby používali voliteľné parametre.

Príklad použitia voliteľných argumentov je uvedený nižšie:

Pomocou systému; pomocou systému.collections.genic; Pomocou systému.Linq; Pomocou systému.Text; Názov mespace ConzoleApplication1 (Triedny program (// Arguments B as špecifikujte pri volaní voliteľne Static int Mysum (INT A, INT B \u003d 5, INT C \u003d 10) (Vrátenie A + B + C;) Static Void Main () (Int SUM1) \u003d MYSUM (3); Int SUM2 \u003d MYSUM (3,12); CONSOLE.WRIKTION ("SUM1 \u003d" + SUM1); CONSOLE.WRISTEAL ("SUM2 \u003d" + SUM2); CONSOLEAS.READLINE ();));

Treba mať na pamäti, že všetky nepovinné argumenty musia byť určite uvedené právom povinného. Okrem metód môžu byť v dizajnéroch, indektoroch a delegátoch používať voliteľné argumenty.

Výhodou voliteľných argumentov je najmä v tom, že zjednodušujú programové ošetrenie komplexnými výzvami metód a konštruktérov. Často, často v metóde musíte nastaviť viac parametrov ako obvykle. A v takýchto prípadoch môžu byť niektoré z týchto parametrov voliteľné z dôvodu presného používania voliteľných argumentov. To znamená, že sú potrebné len tie argumenty, ktoré sú dôležité v tomto konkrétnom prípade, a nie všetky argumenty, ktoré inak musia byť povinné. Tento prístup nám umožňuje racionalizovať metódu a zjednodušiť programovanie na to.

Argumenty

Ešte jeden funkčnosťktorý bol pridaný do c # s výstupnou verziou verzie .NET 4.0, je podpora tzv. argumenty (pomenované argumenty). Ako je známe, že pri prenose argumentov by sa postup ich nasledovne mohol zhodovať s týmto poradím, v ktorom sú parametre definované v samotnom spôsobe. Inými slovami, hodnota argumentu je pridelená parametrom svojou pozíciou v zozname argumentov.

Toto obmedzenie je navrhnuté tak, aby prekonalizované argumenty. Názov Argument vám umožňuje zadať názov parametra, na ktorý je jeho hodnota priradená. A v tomto prípade, rád, že argumenty už nezáleží. Tak, pomenované argumenty do určitej miery podobné tým, ktoré boli uvedené skoršie inicializátory objektov, hoci sa od nich líšia so svojou syntaxou. Ak chcete zadať argument názvu, použije sa ďalšia forma syntaxe:

názov parametra: Hodnota

Tu názov parametra Označuje názov parametra, na ktorý sa hodnota prechádza. Samozrejme, parameter_name musí znamenať názov platného parametra pre zvanú metódu.

Pri vytváraní console Application V programovacom jazyku C ++ je reťazec automaticky vytvorený veľmi podobný:

Int hlavné (INT ARGC, CHAR * ARGV) // Hlavné () Funkčné parametre

Tento reťazec je hlavička hlavná funkcia Hlavné (), parametre args a argv sú vyhlásené v zátvorkách. Takže, ak spustíte program prostredníctvom príkazového riadku, potom je možné preniesť akékoľvek informácie k tomuto programu, pre tento program, a existujú argc a parametre ARGV. Parameter ARGC má typ údajov INT a obsahuje počet parametrov prenášaných na hlavnú funkciu. Okrem toho je Argc vždy aspoň 1, aj keď neposielame žiadne informácie, pretože prvý parameter je názov funkcie. Parameter Argv je rad ukazovateľov na reťazce. Prostredníctvom príkazového riadka je možné prenášať len typ reťazca. Ukazovatele a riadky sú dve veľké témy, ktoré sú vytvorené samostatné úseky. Takže to je cez parameter ARGV a akékoľvek informácie sa prenášajú. Vytvoríme program, ktorý prebiehme prostredníctvom príkazu windows reťazeca prenášať niektoré informácie.

// ARGC_ARGV.CPP: Určuje vstupný bod pre aplikáciu konzoly. #Include "stdafx.h" #include Použitie menného priestoru STD; Int hlavné (INT ARGC, CHAR * ARGV) (ak (ARGC\u003e<< argv<

// kódový kód :: bloky

// dev-c ++ kód

// ARGC_ARGV.CPP: Určuje vstupný bod pre aplikáciu konzoly. #Include. Použitie menného priestoru STD; Int Hlavný (INT ARGC, CHAR * ARGV) (ak (ak (ARGC\u003e 1) // Ak vysielame argumenty, Argc bude väčšia ako 1 (v závislosti od počtu argumentov) (COUT<< argv<

Po tom, čo ste sa shránili program, otvorte príkazový riadok systému Windows a presuňte do okna príkazového riadka nášho programu v okne príkazového riadka, úplná cesta k programu sa zobrazí na príkazovom riadku (ale môžete predpísať cestu k Manuálny program), potom môžete kliknúť Zadať A program sa spustí (pozri obrázok 1).

Obrázok 1 - Hlavné nastavenia funkcie

Keďže sme práve spustili program a neposkytli žiadne argumenty, správa nie je uvedená. Obrázok 2 zobrazuje začiatok rovnakého programu prostredníctvom príkazového riadka, ale už s prenosom otvoreného argumentu.

Obrázok 2 - hlavné funkčné parametre

Argument je slovo otvorené, ako je možné vidieť z obrázku, toto slovo sa objavilo na obrazovke. Môžete okamžite prenášať niekoľko parametrov, oddeliť ich navzájom. Ak potrebujete odovzdať parameter pozostávajúci z niekoľkých slov, potom musia byť prevzaté do dvojitých úvodzoviek, a potom tieto slová budú považované za jeden parameter. Na obrázku napríklad ukazuje spustenie programu, s prevodom argumentu pozostávajúceho z dvoch slov - to funguje.

Obrázok 3 - hlavné parametre funkcií

A ak odstránite citácie. Uvidím len slovo. Ak neplánujete prenášať žiadne informácie, keď spustíte program, môžete vymazať argumenty v hlavnej funkcii (), môžete tiež zmeniť mená argumentov. Niekedy existuje modifikácia parametrov Argc a ARGV, ale všetko závisí od typu vytvorenia aplikácie alebo z rozvojového prostredia.

V programe C môžete preniesť niektoré argumenty. Keď je výpočet na počiatočnej výpočte na hlavnú (), prenáša sa tri parametre. Prvá z nich definuje počet argumentov príkazov pri prístupe k programu. Druhou je rad ukazovateľov na symbolické reťazce obsahujúce tieto argumenty (jeden argument jeden v jednom riadku). Tretí je tiež rad ukazovateľov na reťazce znakov, používa sa na prístup k parametrom operačného systému (na premenné prostredia).

Zdá sa, že takýto reťazec je:

premenná \u003d hodnota \\ 0

Posledný reťazec možno nájsť v dvoch posledných nuly.

Nazývame argumenty hlavnej () funkcie, resp. Argc, argv a env (akékoľvek iné názvy sú možné). Potom sú povolené nasledujúce opisy:

hlavný (INT ARGC, CHAR * ARGV)

hlavný (Int Argc, Char * ARGV, CHAR * ENV)

Predpokladajme, že na disku A: Existuje nejaký program PROG.EXE. Otočte sa na ňu takto:

A:\u003e Prog.exe File1 File2 File3

Potom Argv je ukazovateľ na reťazec A: PROG.EXE, ARGV - na riadkovom súbore1 atď. Prvý skutočný argument poukazuje na Argv a na poslednom - ARGV. Ak ARGC \u003d 1, potom po názve programu neexistuje príkazový riadok parametrov. V našom príklade ARGC \u003d 4.

Rekurzia

Rekurzia sa nazýva takáto metóda volania, v ktorej sa funkcia adresuje.

Dôležitým bodom pri vypracúvaní rekurzívneho programu je organizácia výstupu. Je ľahké urobiť chybu, ktorá spočíva v tom, že funkcia bude konzistentne spôsobiť nekonečne dlho. Preto by mal rekurzívny proces krok za krokom zjednodušiť úlohu tak, že na konci nie je rekurzívnym riešením. Použitie rekurzie nie je vždy žiaduce, pretože to môže viesť k pretečeniu stohu.

Knižničné funkcie

V programových systémoch sa podprogram vyriešiť spoločné úlohy kombinované do knižníc. Medzi tieto úlohy patria: výpočet matematických funkcií, zadanie / výstupné dáta, spracovanie riadkov, interakciu s nástrojmi operačného systému atď. Použitie podprogramov knižnice eliminuje používateľa od potreby rozvíjať vhodné fondy a poskytuje ho ďalšou službou. Funkcie zahrnuté v knižnici sú dodávané s programovým systémom. Ich reklamy sú uvedené v * .h súbory (tieto sú takzvané zahrnuté alebo hlavičkové súbory). Preto, ako už bolo uvedené vyššie, na začiatku programu s funkciami knižnice by mali byť reťazce formulára:

#Include.<включаемый_файл_типа_h>

Napríklad:

#Include.

Existuje tiež prostriedky na rozšírenie a vytváranie nových knižníc s užívateľskými programami.

Pre globálne premenné je v pamäti priradené pevné miesto v pamäti. Miestne premenné sú uložené v zásobníku. Medzi nimi je pamäťová oblasť pre dynamickú distribúciu.

Funkcie Malloc () a bezplatné () sa používajú na dynamickú distribúciu voľnej pamäte. Funkcia MALLOC () zvýrazňuje pamäť, bezplatná funkcia () ho uvoľní. Prototypy týchto funkcií sú uložené v súbore hlavičky STDLIB.H a majú formu:

vOID * MALLOC (veľkosť veľkosti);

vOID * ZADARMO (VOID * P);

Funkcia MALLOC () vráti indikátor Void; Pre správne používanie sa hodnota funkcie musí konvertovať na ukazovateľ na príslušný typ. Po úspešnom vykonaní funkcia vráti ukazovateľ na prvý bajt voľnej veľkosti veľkosti. Ak nie je dostatočné množstvo pamäte, hodnota je 0. Ak chcete určiť počet bajtov potrebných pre premennú, použite operáciu SIZEOF ().

Príklad použitia týchto funkcií:

#Include.

#Include.

p \u003d (INT *) MALLOC (100 * SITEF (INT)); / * Pridelenie pamäte pre 100

celé čísla * /

printf ("Nie je dostatok pamäte");

pre (i \u003d 0; ja< 100; ++i) *(p+i) = i; /* Использование памяти */

pre (i \u003d 0; ja< 100; ++i) printf("%d", *(p++));

zadarmo (p); / * Uvoľnenie pamäte * /

Pred použitím ukazovateľa vráteného spoločnosťou Malloc (), musíte sa uistiť, že pamäť je dostatočná (ukazovateľ nie je nula).

Predprocesor

Preprocessor SI je program, ktorý spracováva vstup pre kompilátor. Preprocesor prehliadajúci zdrojový program a vykonáva nasledujúce akcie: pripojuje zadané súbory k nemu, vytvára substitúcie a tiež kontroluje podmienky kompilácie. Pre Preprocessor sú navrhnuté rady programu začínajúce symbolom #. Jeden riadok je povolený nahrávať len jeden príkaz (smernica predprograpora).

Smernica

#define substitúcia identifikátor

spôsobuje náhradu v nasledujúcom texte programu pomenovaného identifikátora k textu substitúcie (venujte pozornosť nedostatku bodu so čiarkou na konci tohto príkazu). V podstate táto smernica vstúpi do definície makro (makro), kde "identifikátor" je názov makro definície a "substitúcia" je postupnosť znakov, na ktoré predprocesor nahrádza zadaný názov, keď ho nájde v texte programu . Názov definície makro je prijatý veľkými písmenami.

Zvážte príklady:

Prvý riadok volá náhradu v programe Max Identifier na konštantu 25. Druhý umožňuje používať v texte namiesto otváracej ortézy (().

Poznamenávame, že keďže Preprocesor nekontroluje kompatibilitu medzi symbolickými názvami makro definícií a kontextom, v ktorom sa používajú, odporúča sa, aby takéto identifikátory odporúčali na určenie smernice #define, ale pomocou kľúčového slova CONST s Explicitný typ typu (toto je viac súvisiace s C + +):

const int max \u003d 25;

(Typ INT nemôže špecifikovať, pretože je nainštalovaný štandardne).

Ak je smernica #define:

#Define identifikátor (identifikátor, ..., identifikátor) substitúcia

okrem toho neexistuje priestor medzi prvým identifikátorom a otváracím držiakom, je to definícia makro-argumentov s argumentmi. Napríklad po vzniku reťazca formulára:

#Define Read (Val) Scanf ("% D", & Val)

Čítať (y) operátora; vnímané rovnako ako skenf ("% d", & y); VAL je argument a makro-argument s argumentom.

Ak sú v náhradnom riadku dlhé definície, na konci nasledujúceho riadku je nastavený symbol.

V definícii makro môžete dať objekty oddelené znakov ##, napríklad:

#Define pr (x, y) x ## y

Potom, PR (A, 3) spôsobí substitúciu A3. Alebo napríklad definícia makro

#Define z (A, B, C, D) A (B ## C ## D)

bude nahradený z (hriech, x, +, y) na hriech (x + y).

Symbol # umiestnený pred macroartumom označuje konverziu do reťazca. Napríklad po smernici

#Define Prim (var) Printf (#var "\u003d% D", var)

nasledujúci fragment textu programu

konvertované:

printf ("Rok" "\u003d% D", rok);

Opíšeme iné smernice predprograpora. Smernica #include sa už stretla skôr. Môže byť použitý v dvoch formách:

#Include "názov súboru"

#Include.<имя файла>

Akcia oboch príkazov sa znižuje tak, aby umožnili súbory so zadaným názvom. Prvý z nich stiahne súbor z aktuálneho alebo špecifikovaného ako prefix katalógu. Druhý príkaz hľadá súbor v štandardných lokalitách definovaných v programovacom systéme. Ak je súbor, ktorého meno zaznamenané v dvojitých úvodzovkách, nebol nájdený v zadanom adresári, vyhľadávanie bude pokračovať v podadresároch zadaných pre príkaz #includ<...>. #Include smernice je možné investovať do seba.

Nasledujúca skupina smerníc vám umožňuje selektívne kompilovať časti programu. Tento proces sa nazýva podmienková kompilácia. Táto skupina zahŕňa #IF, #ELSE, #ELIF, #ENDIF, #IFDEF, #IFNDEF smernice. Hlavnou formou záznamu smernice o #IF je: \\ t

#if constant_construction sekvencií_perátory

Tu sa skontroluje hodnota konštantného výrazu. Ak je to pravda, zadaná sekvencia operátorov sa vykonáva, a ak je nepravdivá, táto sekvencia operátorov je preskočená.

Akcia smernice #ELSE je podobná akcii iného príkazu v S, napríklad:

# Ak konštantné) zamestnanie

cECEATION_ Operators_2.

Tu, ak je konštantný výraz pravdivý, potom sa vykonáva sekvencerové sekvences_1 a ak falsely - sekvencia_2.

#Elif smernica znamená typ "inde, ak". Hlavná forma jeho používania má formulár:

# Ak konštantné) zamestnanie

prevádzkovatelia sekvencií

#elif constant_mapsion_1

sequera_perator_1.

#elif constant_nesome_n.

sekvencia_perator_n.

Tento formulár je podobný dizajnu typu SI: ak ... inak, ak ... inak, ak ...

Smernica

#IFDEF identifikátor

nastaví zadaný identifikátor v súčasnosti, t.j. Či vstúpil do smernice o druhoch #define. Riadok typu

#IFNDEF identifikátor

kontroluje, či je zadaný identifikátor v súčasnosti momentálne. Pre niektoré z týchto smerníc môže nasledovať ľubovoľný počet textových reťazcov #ELSE (#Elif nie je možné použiť) a končí s #endif reťazec. Ak je testovací stav pravdivý, potom všetky riadky medzi #ELSE a #ENDIF sú ignorované, a ak falošne, potom riadky medzi kontrolami a #else (ak slová #else nie sú, potom #ENDIF). Smernice #IF a #IFNDEF môžu "povoliť" jeden k druhému.

Zobrazenie smernice

#Undef identifikátor

vedie k tomu, že zadaný identifikátor začne byť považovaný za neistý, t.j. nepodlieha nahradeniu.

Zvážte príklady. Tri nasledujúce smernice:

skontrolujte, či je definovaný identifikátor zápisu (t.j. Tam bol tím druhého druhu #Define Write ...), a ak áno, potom názov zápisu začína byť považovaný za neistý, t.j. nepodlieha nahradeniu.

Smernica

#Define písať fprintf.

skontrolujte, či je identifikátor zápisu neistý, a ak áno, potom bude identifikátor zápisu určený namiesto názvu fprintu.

Smernica #Error je napísaná v nasledujúcom formulári:

#Error Message_ab_obkka

Ak sa nachádza v texte programu, na displeji sa zobrazí chybové hlásenie. Tento príkaz sa uplatňuje hlavne na etape ladenia. Všimnite si, že chybové hlásenie nemusí vstúpiť do dvojitých úvodzoviek.

Smernica #Line je navrhnutá tak, aby zmenila hodnoty premenných _line_ a _file_ definované v programovom systéme SI. Premenná _line_ obsahuje číslo programového reťazca vykonaného v aktuálnom čase. Identifikátor _file_ je ukazovateľ na reťazec s názvom kompilovaného programu. Smernica #Line je napísaná takto:

# Obrázok "Názov súboru"

Tu je číslo akékoľvek kladné celé číslo, ktoré bude priradené k premennej _line_, názov_name je voliteľný parameter, ktorý prepíše hodnotu _file_.

Smernica #Pragma vám umožňuje preniesť niektoré pokyny pre kompilátor. Napríklad reťazec

naznačuje, že program v jazyku SI má linky v jazyku assembler. Napríklad:

Zvážte niektoré globálne identifikátory alebo makroenasy (mená Makro definície). Definuje sa päť takýchto názvov: _LINE_, _FILE_, _DATE_, _TIME_, _STDC_. Dvaja z nich (_line_ a _file_) boli už opísané vyššie. Identifikátor _date_ definuje reťazec, v ktorom sa údaje prenosu zdrojového súboru uložia na kód objektu. Identifikátor _TIME_ Nastaví reťazec, ktorý uloží čas prenosu zdrojového súboru na objektový kód. Makro _STDC_ je 1, ak sa použije macopospace špecifické pre štandardné. V opačnom prípade sa táto premenná nestanoví.



Páči sa vám článok? Zdieľaj to