Buyruqlar qatori parametrlari. Ixtiyoriy va nomli argumentlar C argumentlari

Borland C ++ uchta asosiy () argumentni qo'llab-quvvatlaydi. Birinchi ikkitasi an'anaviy argc va argv. Bular ANSI C standarti tomonidan belgilangan main () ning yagona argumentlari bo'lib, ular buyruq qatori argumentlarini dasturingizga o'tkazish imkonini beradi. Buyruqlar qatori argumentlari - bu operatsion tizimning buyruq satridagi dastur nomidan keyingi ma'lumotlar. Masalan, dastur Borland line kompilyatori bilan kompilyatsiya qilinganda, odatda bcc teriladi dastur_nomi

Qayerda dastur_nomi kompilyatsiya qilinadigan dastur hisoblanadi. Dastur nomi kompilyatorga argument sifatida uzatiladi.

argc parametri buyruq qatori argumentlari sonini o'z ichiga oladi va butun sondir. U har doim kamida 1 bo'ladi, chunki dastur nomi birinchi argument sifatida mos keladi. argv parametri belgilar ko'rsatkichlari massiviga ko'rsatgichdir. Ushbu massivdagi har bir element buyruq qatori argumentiga ishora qiladi. Barcha buyruq qatori argumentlari satrlardir. Barcha raqamlar dastur tomonidan ichki formatga aylantiriladi. Quyidagi dastur dastur nomidan so‘ng kiritilganda “Salom” so‘ng foydalanuvchi nomini chop etadi:

#o'z ichiga oladi

{
agar (argc! = 2)
{
printf ("Ismingizni yozishni unutdingiz \ n");
qaytish 1;
}
printf ("Salom% s", argv);
qaytish 0;
}

Agar siz ushbu dastur nomini chaqirsangiz va foydalanuvchi nomi Sergey bo'lsa, dasturni ishga tushirish uchun quyidagilarni kiritishingiz kerak:
ismi Sergey.
Dastur natijasida paydo bo'ladi:
"Salom Sergey".

Buyruqlar qatori argumentlari bo'sh joylar yoki yorliqlar bilan ajratilishi kerak. Vergul, nuqtali vergul va shunga o'xshash belgilar chegaralovchi hisoblanmaydi. Masalan:

Uch qatordan iborat, esa

Herb, Rik, Fred

Bu bitta qator - vergul ajratilmagan.

Agar siz bo'shliqlar yoki yorliqlarni o'z ichiga olgan qatorni bitta argument sifatida o'tkazishingiz kerak bo'lsa, uni qo'sh tirnoq ichiga olishingiz kerak. Masalan, bu bitta dalil:

"bu sinov"

Argv ni to'g'ri e'lon qilish muhimdir. Eng tipik usul:

Bo'sh qavslar massivning aniq uzunligi yo'qligini bildiradi. Individual elementlarga argv indekslash yordamida kirish mumkin. Masalan, argv har doim dastur nomini o'z ichiga olgan birinchi qatorga ishora qiladi. argv keyingi qatorga ishora qiladi va hokazo.

Quyida buyruq qatori argumentlaridan qanday foydalanishning kichik misoli keltirilgan. U buyruq satrida ko'rsatilgan qiymatdan pastga sanaydi va u nolga yetganda signal beradi. E'tibor bering, birinchi argumentda standart atoi () funksiyasi yordamida butun songa aylantirilgan raqam mavjud. Agar ikkinchi argument sifatida "displey" qatori mavjud bo'lsa, u holda hisoblagichning o'zi ekranda ko'rsatiladi.

/ * hisoblash dasturi * /

#o'z ichiga oladi
#o'z ichiga oladi
# o'z ichiga oladi
int main (int argc, char * argv)
{
int disp, hisoblash;
agar (argc<2)
{
printf ("Hisobning uzunligini kiritishingiz kerak \ n");
printf ("buyruqlar satrida. Qayta urinib ko'ring. \ n");
qaytish 1;
}
agar (argc == 3 &&! strcmp (argv, "displey")) disp = 1;
Aks holda disp = 0;
uchun (hisoblash = atoi (argv); sanash; -hisoblash)
if (disp) printf (“% d”, hisoblash);
printf ("% c", "\ a"); / * ko'pgina kompyuterlarda bu qo'ng'iroq * /
qaytish 0;
}

E'tibor bering, agar argumentlar ko'rsatilmagan bo'lsa, xato xabari paydo bo'ladi. Bu to'g'ri ma'lumotsiz dasturni ishga tushirishga urinilgan bo'lsa, ko'rsatmalar berish uchun buyruq qatori argumentlaridan foydalanadigan dasturlar uchun eng keng tarqalgan.

Buyruqlar qatoridagi alohida belgilarga kirish uchun argv-ga ikkinchi indeks qo'shing. Misol uchun, quyidagi dastur o'zi chaqirilgan barcha argumentlarni bir vaqtning o'zida bitta belgi bilan chop etadi:

#o'z ichiga oladi
int main (int argc, char * argv)
{
int t, i;
uchun (t = 0; t {
i = 0;
while (argv [t] [i])
{
printf ("% c", argv [t] [i]);
}
printf ("");
}
qaytish 0;
}

Esda tutingki, birinchi indeks satrga kirish uchun, ikkinchisi esa satrdagi belgiga kirish uchun.

Odatda argc va argv asl buyruqlarni olish uchun ishlatiladi. Nazariy jihatdan, siz 32767 tagacha argumentga ega bo'lishingiz mumkin, lekin ko'pchilik operatsion tizimlar bunga yaqinlashmaydi. Odatda, bu argumentlar fayl nomi yoki variantlarni belgilash uchun ishlatiladi. Buyruqlar qatori argumentlaridan foydalanish dasturga professional ko'rinish beradi va dasturni ommaviy ish fayllarida ishlatishga imkon beradi.

Borland C ++ bilan ta'minlangan WILDARGS.OBJ faylini qo'shsangiz, * .EXE tipidagi argumentlarda shablonlardan foydalanishingiz mumkin. (Borland C ++ avtomatik ravishda shablonlarni tahlil qiladi va shunga mos ravishda argc ni oshiradi.) Masalan, agar siz WILDARGS.OBJ ni quyidagi dasturga ulasangiz, u buyruq satrida berilgan fayl nomiga qancha fayl mos kelishini ko'rsatadi:

/ * Ushbu dasturni WILDARGS.OBJ bilan bog'lang * /

#o'z ichiga oladi
int main (int argc, char * argv)
{
ro'yxatdan o'tish int i;
printf ("% d fayl belgilangan nomga mos keladi \ n", argc-1);
printf ("Ular:");
uchun (i = 1; i printf ("% s", argv [i]);
qaytish 0;
}

Agar siz ushbu dasturni WA deb nomlasangiz, uni quyida ko'rsatilgandek ishga tushirsangiz, siz EXE kengaytmali fayllar soni va ushbu fayllar nomlari ro'yxatini olasiz:

argc va argv dan tashqari Borland C ++ uchinchi buyruq qatori -env argumentini ham taqdim etadi. env parametri dasturga operatsion tizim muhiti haqidagi ma'lumotlarga kirish imkonini beradi. env parametri argc va argv ga amal qilishi kerak va shunday e'lon qilinadi:

Ko'rib turganingizdek, env argv bilan bir xil tarzda e'lon qilinadi. Xuddi argv kabi, u qatorlar qatoriga ko'rsatgichdir. Har bir satr operatsion tizim tomonidan belgilangan muhit liniyasidir. env parametrining argc parametriga o'xshashi yo'q, u qancha muhit chizig'i borligini bildiradi. Buning o'rniga, muhitning oxirgi qatori nolga teng. Quyidagi dastur hozirda operatsion tizim tomonidan belgilangan barcha muhit satrlarini chop etadi:

/ * bu dastur atrof-muhitning barcha qatorlarini chop etadi * /

#o'z ichiga oladi
int main (int argc, char * argv, char * env)
{
int t;
uchun (t = 0; env [t] / t ++)
printf ("% s \ n", env [t]);
qaytish 0;
}

E'tibor bering, argc va argv dastur tomonidan ishlatilmasa ham, ular parametrlar ro'yxatida mavjud bo'lishi kerak. C parametrlarning nomlarini bilmaydi. Buning o'rniga, ulardan foydalanish parametrlarni e'lon qilish tartibi bilan belgilanadi. Aslida, siz parametrni xohlaganingizcha chaqirishingiz mumkin. argc, argv va env anʼanaviy nomlar boʻlgani uchun dasturni oʻqiyotgan har bir kishi bu asosiy () funksiyaning argumentlari ekanligini bir zumda tushunishi uchun ulardan foydalanishni davom ettirgan maʼqul.

Dasturlar uchun odatiy vazifa atrof-muhit qatorida ko'rsatilgan qiymatni topishdir. Masalan, PATH liniyasining mazmuni dasturlarga qidiruv yo'llaridan foydalanish imkonini beradi. Quyidagi dastur standart qidiruv yo'llarini e'lon qiladigan satrlarni qanday topishni ko'rsatadi. U quyidagi prototipga ega strstr () standart kutubxona funksiyasidan foydalanadi:

Char * strstr (const char * str1, const char * str2);

strstr () funktsiyasi str1 tomonidan ko'rsatilgan satrni str2 tomonidan ko'rsatilgan satrda qidiradi. Agar shunday satr topilsa, u holda birinchi pozitsiyaga ko'rsatgich qaytariladi. Agar moslik topilmasa, funktsiya NULLni qaytaradi.

/ * dastur muhit satrlari orasida PATH * / ni o'z ichiga olgan qatorni qidiradi

#o'z ichiga oladi
#o'z ichiga oladi
int main (int argc, char * argv, char * env)
{
int t;
uchun (t = 0; env [t]; t ++)
{
if (strstr (env [t], "PATH"))
printf ("% s \ n", env [t]);
}
qaytish 0;
}

Ixtiyoriy va nomli argumentlar

Ixtiyoriy argumentlar

C # 4.0 yangi xususiyatni taqdim etadi, bu usulni chaqirishda argumentlarni ko'rsatish qulayligini yaxshilaydi. Ushbu vosita deyiladi ixtiyoriy argumentlar va usul parametri uchun standart qiymatni belgilash imkonini beradi. Agar usulni chaqirayotganda parametr uchun mos argument ko'rsatilmagan bo'lsa, bu qiymat sukut bo'yicha ishlatiladi. Shuning uchun bunday parametr uchun argument keltirish shart emas. Ixtiyoriy argumentlar ba'zi parametrlarga standart argumentlarni qo'llash orqali usul chaqiruvlarini soddalashtirishga imkon beradi. Ular, shuningdek, usulni ortiqcha yuklashning "qisqa" shakli sifatida ham foydalanish mumkin.

Ixtiyoriy argumentlarni qo'shish uchun asosiy rag'bat COM ob'ektlari bilan o'zaro aloqani soddalashtirish zarurati edi. Bir nechta Microsoft ob'ekt modellari (masalan, Microsoft Office) MAQOMOTI ob'ektlari orqali funksionallikni ta'minlaydi, ularning aksariyati uzoq vaqt oldin yozilgan va ixtiyoriy parametrlarni olish uchun mo'ljallangan.

Ixtiyoriy argumentlardan foydalanish misoli quyida ko'rsatilgan:

Tizimdan foydalanish; System.Collections.Generic yordamida; System.Linq yordamida; System.Text yordamida; nom maydoni ConsoleApplication1 (sinf Dasturi (// argumentlar b va c statik int mySum (int a, int b = 5, int c = 10) chaqirilganda belgilash uchun ixtiyoriy) (a + b + c qaytaring;) statik void Asosiy () () ( int sum1 = mysum (3); int sum2 = mysum (3,12); Console.WriteLine ("Sum1=" + sum1); Console.WriteLine ("Sum2=" + sum2); Console.ReadLine ();)) )

Shuni yodda tutish kerakki, barcha ixtiyoriy dalillar talab qilinganlarning o'ng tomonida ko'rsatilishi kerak. Usullarga qo'shimcha ravishda konstruktorlar, indekserlar va delegatlarda ixtiyoriy argumentlardan foydalanish mumkin.

Ixtiyoriy argumentlarning afzalligi shundaki, ular dasturchilarga murakkab usul va konstruktor chaqiruvlari bilan ishlashni osonlashtiradi. Axir, odatda talab qilinadigan usuldan ko'ra ko'proq parametrlarni ko'rsatish kerak bo'ladi. Va shunga o'xshash holatlarda, ushbu parametrlarning ba'zilari ixtiyoriy argumentlardan ehtiyotkorlik bilan foydalanish orqali ixtiyoriy bo'lishi mumkin. Bu shuni anglatadiki, siz boshqa holatlarda talab qilinishi kerak bo'lgan barcha argumentlarni emas, balki faqat ushbu alohida holatda muhim bo'lgan dalillarni topshirishingiz kerak. Ushbu yondashuv usulni ratsionalizatsiya qilish va dasturchining uni boshqarishini soddalashtirish imkonini beradi.

Nomlangan argumentlar

.NET 4.0 ning chiqarilishi bilan C# ga qo'shilgan yana bir xususiyat bu deb ataladigan qo'llab-quvvatlashdir nomli argumentlar... Ma'lumki, argumentlarni metodga o'tkazishda, ularning paydo bo'lish tartibi, qoida tariqasida, parametrlar metodning o'zida aniqlangan tartib bilan mos kelishi kerak. Boshqacha qilib aytganda, argument qiymati parametrga argumentlar roʻyxatidagi oʻrni boʻyicha tayinlanadi.

Nomlangan argumentlar ushbu cheklovni bartaraf etish uchun mo'ljallangan. Nomlangan argument uning qiymati tayinlangan parametr nomini belgilash imkonini beradi. Va bu holda, argumentlar tartibi endi muhim emas. Shunday qilib, nomlangan argumentlar sintaksisi bo'yicha ulardan farq qilsa-da, avval aytib o'tilgan ob'ektni ishga tushiruvchilarga biroz o'xshaydi. Argumentni nomi bilan belgilash sintaksisi:

parametr_nomi: qiymat

Bu yerda parametr_nomi qiymat uzatiladigan parametr nomini bildiradi. Albatta, parametr_nomi chaqirilayotgan usul uchun yaroqli parametr nomini bildirishi kerak.

Ba'zi argumentlar C dasturlariga o'tkazilishi mumkin. Hisoblash boshida main () chaqirilsa, unga uchta parametr uzatiladi. Ulardan birinchisi dasturni chaqirishda buyruq argumentlari sonini aniqlaydi. Ikkinchisi, ushbu argumentlarni o'z ichiga olgan belgilar qatoriga ko'rsatgichlar majmuasi (har bir satr uchun bitta argument). Uchinchisi, shuningdek, belgilar qatoriga ko'rsatgichlar massivi bo'lib, u operatsion tizim parametrlariga (atrof-muhit o'zgaruvchilari) kirish uchun ishlatiladi.

Har qanday bunday chiziq quyidagicha ifodalanadi:

o'zgaruvchi = qiymat \ 0

Oxirgi qatorni keyingi ikkita nol bilan topish mumkin.

Asosiy () funksiyasining argumentlarini mos ravishda nomlaylik: argc, argv va env (boshqa nomlar ham mumkin). Keyin quyidagi tavsiflar haqiqiy hisoblanadi:

asosiy (int argc, char * argv)

asosiy (int argc, char * argv, char * env)

Aytaylik, sizda A: diskida prog.exe dasturi bor. Keling, unga quyidagicha murojaat qilaylik:

Javob: \> prog.exe fayl1 fayl2 fayl3

Keyin argv - A qatoriga ko'rsatgich: \ prog.exe, argv - fayl1 qatoriga va hokazo. Birinchi haqiqiy argument argv tomonidan, oxirgisi esa argv tomonidan ko'rsatiladi. Agar argc = 1 bo'lsa, u holda buyruq satrida dastur nomidan keyin parametrlar yo'q. Bizning misolimizda argc = 4.

Rekursiya

Rekursiya - bu funktsiya o'zini chaqiradigan chaqiruv usuli.

Rekursiv dasturni yozishda muhim nuqta chiqishni tashkil qilishdir. Funktsiyani o'zini ketma-ket cheksiz chaqirishda xato qilish oson. Shuning uchun rekursiv jarayon muammoni bosqichma-bosqich soddalashtirishi kerak, shunda oxir-oqibat u uchun rekursiv bo'lmagan yechim paydo bo'ladi. Rekursiyadan foydalanish har doim ham istalmagan, chunki bu stekning to'lib ketishiga olib kelishi mumkin.

Kutubxona funktsiyalari

Dasturlash tizimlarida umumiy muammolarni hal qilish uchun kichik dasturlar kutubxonalarga birlashtirilgan. Bu vazifalarga quyidagilar kiradi: matematik funktsiyalarni hisoblash, ma'lumotlarni kiritish/chiqarish, satrlarni qayta ishlash, operatsion tizim vositalari bilan o'zaro ta'sir qilish va hokazo. Kutubxona tartiblaridan foydalanish foydalanuvchini tegishli vositalarni ishlab chiqish zaruratidan xalos qiladi va unga qo'shimcha xizmatlarni taqdim etadi. Kutubxonalarga kiritilgan funktsiyalar dasturlash tizimi bilan ta'minlangan. Ularning deklaratsiyasi * .h fayllarida berilgan (bular o'z ichiga yoki sarlavha fayllari deb ataladi). Shuning uchun, yuqorida aytib o'tilganidek, kutubxona funktsiyalari bilan dasturning boshida quyidagi shakl qatorlari bo'lishi kerak:

#o'z ichiga oladi<включаемый_файл_типа_h>

Masalan:

#o'z ichiga oladi

Shuningdek, foydalanuvchi dasturlari bilan yangi kutubxonalarni kengaytirish va yaratish uchun qulayliklar mavjud.

Global o'zgaruvchilar uchun dasturning butun davomiyligi uchun qattiq xotira maydoni ajratiladi. Mahalliy o'zgaruvchilar stekda saqlanadi. O'rtada dinamik ajratish uchun xotira maydoni mavjud.

Malloc () va bepul () funktsiyalari bo'sh xotirani dinamik ravishda ajratish uchun ishlatiladi. Malloc () funksiyasi xotirani ajratadi, free () funksiyasi uni bo'shatadi. Ushbu funktsiyalarning prototiplari stdlib.h sarlavha faylida saqlanadi va quyidagicha ko'rinadi:

void * malloc (size_t hajmi);

bekor * bepul (void * p);

malloc () funktsiyasi bo'sh ko'rsatkichni qaytaradi; to'g'ri foydalanish uchun funktsiyaning qiymati mos turga ko'rsatgichga aylantirilishi kerak. Muvaffaqiyatli bo'lsa, funktsiya o'lchamdagi bo'sh xotiraning birinchi baytiga ko'rsatgichni qaytaradi. Agar xotira yetarli bo'lmasa, 0 qiymati qaytariladi.O'zgaruvchiga kerakli baytlar sonini aniqlash uchun sizeof () amalidan foydalaning.

Ushbu funktsiyalardan foydalanishga misol:

#o'z ichiga oladi

#o'z ichiga oladi

p = (int *) malloc (100 * sizeof (int)); / * 100 uchun xotira ajrating

butun sonlar * /

printf ("Xotira yetarli emas \ n");

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

uchun (i = 0; i< 100; ++i) printf("%d", *(p++));

bepul (p); / * Bo'sh xotira * /

Malloc () tomonidan qaytarilgan ko'rsatgichni ishlatishdan oldin siz etarli xotira mavjudligiga ishonch hosil qilishingiz kerak (ko'rsatkich null emas).

Preprotsessor

C preprocessor - kompilyatorga kiritilgan ma'lumotlarni qayta ishlaydigan dastur. Preprotsessor dastlabki dasturni ko'rib chiqadi va quyidagi amallarni bajaradi: unga ko'rsatilgan fayllarni ulaydi, almashtirishlarni amalga oshiradi, shuningdek kompilyatsiya shartlarini boshqaradi. Preprotsessor uchun # belgisidan boshlanadigan dastur qatorlari mavjud. Har bir satrda faqat bitta buyruq (preprotsessor direktivasi) ruxsat etiladi.

Direktiv

#define id almashtirish

keyingi dastur matnida nomlangan identifikatorni almashtirish matni bilan almashtirishga sabab bo'ladi (ushbu buyruq oxirida nuqtali vergul yo'qligiga e'tibor bering). Asosan, ushbu direktiva so'l ta'rifini (makros) kiritadi, bu erda "identifikator" so'l ta'rifning nomi va "almashtirish" - bu oldindan protsessor belgilangan nomni dastur matnida topganda uni almashtiradigan belgilar ketma-ketligi. Makros nomini katta harflar bilan yozish odatiy holdir.

Keling, ba'zi misollarni ko'rib chiqaylik:

Birinchi qator dasturning MAX identifikatorini doimiy 25 ga almashtirishiga sabab bo'ladi. Ikkinchisi matndagi ochiladigan jingalak qavs (() o'rniga BEGIN so'zidan foydalanishga imkon beradi.

Esda tutingki, preprotsessor so'l ta'riflarning ramziy nomlari va ular qo'llanilgan kontekst o'rtasidagi moslikni tekshirmaganligi sababli, bunday identifikatorlarni #define direktivasi bilan emas, balki aniq tur ko'rsatkichi bilan const kalit so'zidan foydalanish tavsiya etiladi (bu C ++ uchun to'g'riroq):

const int MAX = 25;

(int turini o'tkazib yuborish mumkin, chunki u sukut bo'yicha o'rnatiladi).

Agar #define direktivasi quyidagicha ko'rinsa:

#define id (id, ..., id) almashtirish

bundan tashqari, birinchi identifikator va ochilish qavs o'rtasida bo'sh joy yo'q, keyin bu argumentlar bilan makro almashtirishning ta'rifi. Masalan, qator paydo bo'lgandan keyin:

#define READ (val) scanf ("% d", & val)

READ bayonoti (y); scanf ("% d", & y) ; bilan bir xil tarzda talqin qilinadi. Bu erda val - argument va argument bilan so'l almashtirish amalga oshirildi.

Agar keyingi satrda davom etadigan uzun almashtirish ta'riflari mavjud bo'lsa, \ belgisi keyingi davomiy qatorning oxiriga joylashtiriladi.

Siz ob'ektlarni makrosga ## belgi bilan ajratilgan holda joylashtirishingiz mumkin, masalan:

#define PR (x, y) x ## y

Shundan so'ng, PR (a, 3) a3 almashtirishga sabab bo'ladi. Yoki, masalan, so'l ta'rifi

#define z (a, b, c, d) a (b ## c ## d)

z (sin, x, +, y) ning sin (x + y) bilan almashtirilishiga olib keladi.

Makros argument oldiga qo'yilgan # belgisi uning satrga o'zgartirilishini bildiradi. Masalan, direktivadan keyin

#define PRIM (var) printf (#var "=% d", var)

dastur matnining keyingi qismi

quyidagicha aylantiriladi:

printf ("yil" "=% d", yil);

Keling, boshqa preprotsessor direktivalarini tasvirlaylik. #include direktivasiga allaqachon duch kelgan. U ikki shaklda qo'llanilishi mumkin:

# "fayl nomini" o'z ichiga oladi

#o'z ichiga oladi<имя файла>

Ikkala buyruqning harakati dasturga ko'rsatilgan nomdagi fayllarni kiritishgacha qisqartiriladi. Birinchisi joriy yoki prefiksli katalogdan faylni yuklaydi. Ikkinchi buyruq faylni dasturlash tizimida belgilangan standart joylarda qidiradi. Agar nomi qoʻsh tirnoq ichida yozilgan fayl koʻrsatilgan katalogda topilmasa, qidiruv #include buyrugʻi uchun koʻrsatilgan kichik kataloglarda davom etadi.<...>... #Include direktivalari bir-birining ichiga joylashtirilishi mumkin.

Direktivlarning keyingi guruhi dastur qismlarini tanlab kompilyatsiya qilish imkonini beradi. Bu jarayon shartli kompilyatsiya deb ataladi. Bu guruhga #if, #else, #elif, #endif, #ifdef, #ifndef direktivalari kiradi. #if direktivasining asosiy shakli:

#if doimiy_ifoda bayoni_ketma-ketligi

Bu yerda doimiy ifodaning qiymati tekshiriladi. Agar bu rost bo'lsa, u holda ko'rsatilgan buyruqlar ketma-ketligi bajariladi, agar noto'g'ri bo'lsa, u holda bu ketma-ketlik o'tkazib yuboriladi.

#else direktivasining harakati C tilidagi else buyrug'ining harakatiga o'xshaydi, masalan:

#agar doimiy_ifoda

bayonot_ketma-ketligi_2

Bu yerda, agar doimiy ifoda rost bo'lsa, u holda bayonot_ketma-ket_1, noto'g'ri bo'lsa, bayonot_tartibi_2 bajariladi.

#elif direktivasi "boshqa bo'lsa" harakatini anglatadi. Uni qo'llashning asosiy shakli quyidagicha:

#agar doimiy_ifoda

bayonot_ketma-ketligi

#elif doimiy_ifodasi_1

bayonot_ketma-ketligi_1

#elif doimiy_ifodasi_n

bayonot_sequence_n

Bu shakl shaklning C konstruktsiyasiga o'xshaydi: if ... else if ... else if ...

Direktiv

#ifdef identifikatori

ko'rsatilgan identifikator hozirda aniqlangan yoki yo'qligini belgilaydi, ya'ni. #define kabi direktivalarga kiritilganmi yoki yo'qmi. Ko'rish chizig'i

#ifndef identifikatori

belgilangan identifikator hozirda aniqlanmaganligini tekshiradi. Ushbu ko'rsatmalarning har qandayidan keyin #else (#elif ishlatib bo'lmaydi) va #endif bilan tugashi mumkin bo'lgan ixtiyoriy miqdordagi matn qatorlari kelishi mumkin. Agar tekshirilgan shart rost bo'lsa, #else va #endif orasidagi barcha satrlar e'tiborga olinmaydi, agar noto'g'ri bo'lsa, chek va #else orasidagi satrlar (agar #else so'zi bo'lmasa, u holda #endif). #If va #ifndef direktivalari bir-birining ichiga joylashtirilishi mumkin.

Direktivni ko'rish

#undef identifikatori

ko'rsatilgan identifikator aniqlanmagan deb hisoblana boshlashiga olib keladi, ya'ni. almashtirib bo'lmaydi.

Keling, ba'zi misollarni ko'rib chiqaylik. Quyidagi uchta ko'rsatma mavjud:

WRITE identifikatori aniqlanganligini tekshiring (ya'ni, #define WRITE ... kabi buyruq bormi) va agar shunday bo'lsa, WRITE nomi aniqlanmagan deb hisoblana boshlaydi, ya'ni. almashtirib bo'lmaydi.

Direktivlar

#define WRITE fprintf

WRITE identifikatorining aniqlanmaganligini tekshiradi va agar shunday bo'lsa, fprintf nomi o'rniga WRITE identifikatori ko'rsatilgan.

#error direktivasi quyidagi shaklda yozilgan:

#xato xato_xabari

Agar u dastur matnida topilsa, kompilyatsiya to'xtaydi va displey ekranida xato xabari ko'rsatiladi. Bu buyruq asosan disk raskadrovka bosqichida ishlatiladi. E'tibor bering, xato xabarini qo'sh tirnoq ichiga qo'shishingiz shart emas.

#line direktivasi C dasturlash tizimida belgilangan _LINE_ va _FILE_ o'zgaruvchilar qiymatlarini o'zgartirish uchun mo'ljallangan. _LINE_ o'zgaruvchisi hozirda bajarilayotgan dasturning qator raqamini o'z ichiga oladi. _FILE_ identifikatori kompilyatsiya qilingan dastur nomiga ega bo'lgan qatorga ko'rsatgichdir. #line direktivasi quyidagicha yozilgan:

#satr raqami "fayl nomi"

Bu erda raqam _LINE_ o'zgaruvchisiga tayinlanadigan har qanday musbat butun son, fayl nomi _FILE_ qiymatini bekor qiluvchi ixtiyoriy parametrdir.

#pragma direktivasi ba'zi ko'rsatmalarni kompilyatorga o'tkazish imkonini beradi. Masalan, chiziq

C dasturida assembler tilidagi qatorlar mavjudligini bildiradi. Masalan:

Keling, ba'zi global identifikatorlarni yoki makro nomlarni (makros ta'riflar nomlarini) ko'rib chiqaylik. Beshta shunday nomlar aniqlangan: _LINE_, _FILE_, _DATE_, _TIME_, _STDC_. Ulardan ikkitasi (_LINE_ va _FILE_) allaqachon yuqorida tavsiflangan. _DATE_ identifikatori manba fayli obyekt kodiga tarjima qilingan sanani saqlaydigan qatorni belgilaydi. _TIME_ identifikatori manba faylining tarjima vaqtini ob'ekt kodiga saqlaydigan qatorni belgilaydi. Agar standart belgilangan makro nomlari ishlatilsa, _STDC_ makrosi 1 qiymatiga ega. Aks holda, bu o'zgaruvchi aniqlanmaydi.


Ba'zan, dasturni ishga tushirayotganda, unga ba'zi ma'lumotlarni uzatish foydali bo'ladi. Odatda, bu ma'lumot buyruq qatori argumentlari yordamida asosiy () funksiyasiga uzatiladi. Buyruqlar qatori argumenti- bu operatsion tizimning buyruq qatoriga dastur nomidan keyin kiritiladigan ma'lumotlar. Misol uchun, dasturni kompilyatsiya qilishni boshlash uchun buyruq satriga buyruq satridan keyin quyidagi kabi narsalarni kiritishingiz kerak:

Cc dastur_nomi

dastur_nomi buyruq qatori argumentidir va siz kompilyatsiya qilmoqchi bo'lgan dastur nomini belgilaydi.

Buyruqlar qatori argumentlarini qabul qilish uchun ikkita maxsus o'rnatilgan argumentlardan foydalaniladi: argc va argv. argc parametri buyruq satridagi argumentlar sonini o'z ichiga oladi va butun son bo'lib, u har doim kamida 1 bo'ladi, chunki birinchi argument dastur nomidir. Va argv parametri qatorlarga ko'rsatgichlar massiviga ko'rsatgichdir. Ushbu massivda har bir element buyruq qatori argumentiga ishora qiladi. Barcha buyruq qatori argumentlari satrlardir, shuning uchun uni ishlab chiqish jarayonida har qanday raqamlarni kerakli ikkilik formatga o'tkazish dasturda ta'minlanishi kerak.

Bu erda buyruq qatori argumentidan foydalanishning oddiy misoli. Ekranda Salom so'zi va sizning ismingiz ko'rsatiladi, bu buyruq qatori argumenti sifatida ko'rsatilishi kerak.

#o'z ichiga oladi #o'z ichiga oladi int main (int argc, char * argv) (agar (argc! = 2) (printf ("Ismingizni kiritishni unutdingiz. \ n"); chiqish (1);) printf ("Salom% s", argv) ; qaytish 0;)

Agar siz ushbu dastur nomini qo'ygan bo'lsangiz va sizning ismingiz Volume bo'lsa, dasturni ishga tushirish uchun buyruq satriga Volume nomini kiriting. Dasturning bajarilishi natijasida Salom, Tom xabari paydo bo'ldi.

Ko'pgina muhitlarda barcha buyruq qatori argumentlari bo'sh joy yoki yorliq bilan ajratilishi kerak. Vergul, nuqtali vergul va shunga o'xshashlar chegaralovchi hisoblanmaydi. Masalan,

Run Spot, yugur

uchta belgi qatoridan iborat, while

Erik, Rik, Fred

bitta belgilar qatori - vergullar, qoida tariqasida, ajratuvchilar sifatida qaralmaydi.

Agar satrda bo'shliqlar bo'lsa, u holda ba'zi muhitlarda qatordan bir nechta argumentlar chiqishiga yo'l qo'ymaslik uchun satr qo'sh tirnoq ichiga olinishi mumkin. Natijada, butun qator bitta argument hisoblanadi. Operatsion tizimingizda buyruq qatori parametrlari qanday o'rnatilishi haqida ko'proq ma'lumot olish uchun ushbu tizim hujjatlariga qarang.

Argv ni to'g'ri e'lon qilish juda muhim. Ko'pincha ular buni qanday qilishadi:

Char * argv;

Bo'sh kvadrat qavslar massivning aniqlanmagan uzunligiga ega ekanligini ko'rsatadi. Endi argv massivini indekslash orqali individual argumentlarga kirish mumkin. Masalan, argv birinchi belgilar qatoriga ishora qiladi, bu har doim dasturning nomi; argv birinchi argumentga ishora qiladi va hokazo.

Buyruqlar qatori argumentlaridan foydalanishning yana bir kichik misoli quyida sanab o'tish dasturidir. Bu dastur baʼzi qiymatdan (buyruqlar satrida koʻrsatilgan) sanab chiqadi va u 0 ga yetganda signal beradi. Eʼtibor bering, dastlabki qiymatni oʻz ichiga olgan birinchi argument standart atoi funksiyasi () yordamida butun son qiymatiga aylantiriladi. Agar ikkinchi buyruq qatori argumenti (va agar dastur nomi argument deb hisoblansa, uchinchisi) "displey" qatori bo'lsa, u holda ortga hisoblash natijasi (teskari tartibda) ekranda ko'rsatiladi.

/ * Teskari hisoblash dasturi. * / # o'z ichiga oladi #o'z ichiga oladi #o'z ichiga oladi #o'z ichiga oladi int main (int argc, char * argv) (int disp, hisoblash; agar (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; }

E'tibor bering, agar buyruq qatori argumentlari ko'rsatilmagan bo'lsa, xato xabari ko'rsatiladi. Buyruqlar qatori argumentlari bo'lgan dasturlar ko'pincha quyidagilarni amalga oshiradi: Agar foydalanuvchi kerakli ma'lumotlarni kiritmasdan ushbu dasturlarni ishga tushirsa, argumentlarni qanday to'g'ri belgilash bo'yicha ko'rsatmalar ko'rsatiladi.

Buyruqlar qatori argumentlaridan biridagi bitta belgiga kirish uchun argv ga ikkinchi indeksni kiriting. Misol uchun, quyidagi dastur o'zi chaqirilgan barcha argumentlarni belgilar bo'yicha chop etadi:

#o'z ichiga oladi int main (int argc, char * argv) (int t, i; uchun (t = 0; t)

Esda tuting, argv birinchi indeksi satrga kirishni ta'minlaydi, ikkinchi indeks esa uning individual belgilariga kirishni ta'minlaydi.

Odatda, argc va argv dastur ishga tushganda kerak bo'ladigan dastlabki buyruqlarni berish uchun ishlatiladi. Masalan, buyruq qatori argumentlari ko'pincha fayl nomi, parametr yoki muqobil xatti-harakatlar kabi ma'lumotlarni belgilaydi. Buyruqlar qatori argumentlaridan foydalanish dasturingizga "professional ko'rinish" beradi va uni ommaviy ish fayllarida ishlatishni osonlashtiradi.

argc va argv nomlari an'anaviy, lekin shart emas. Ushbu ikkita parametrni asosiy () funksiyasida xohlaganingizcha nomlashingiz mumkin. Bundan tashqari, ba'zi kompilyatorlar main () uchun qo'shimcha argumentlarni qo'llab-quvvatlashi mumkin, shuning uchun kompilyatoringiz hujjatlarini tekshiring.

Agar dastur buyruq qatori parametrlarini talab qilmasa, ko'pincha asosiy () funksiya hech qanday parametrga ega emas deb e'lon qilinadi. Bunday holda, ushbu funktsiyaning parametrlar ro'yxatida void kalit so'zi ishlatiladi.

C++ dasturlash tilida avtomatik ravishda konsol ilovasini yaratishda unga juda o'xshash asosiy funksiya avtomatik ravishda yaratiladi:

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

Funktsiya sarlavhasida args va argv argumentlari bilan main () asosiy funksiyasining imzosi mavjud.
Agar dastur buyruq satri orqali ishga tushirilsa, u holda ushbu dasturga istalgan ma'lumotni uzatish mumkin. Buning uchun argc va argv buyruq qatori argumentlari mavjud.
argc parametri int tipidagi bo'lib, asosiy funksiyaga uzatilgan parametrlar sonini o'z ichiga oladi. Bundan tashqari, argc har doim kamida 1 bo'ladi, hatto asosiy funktsiyaga hech qanday ma'lumot o'tkazilmasa ham, birinchi parametr dastur nomidir.
argv parametri satrlarga ko'rsatgichlar massividir. Buyruqlar satri orqali faqat string ma'lumotlarini o'tkazish mumkin.

Dasturni Windows buyruq satri orqali ishga tushirganingizda, unga ba'zi ma'lumotlarni yuborishingiz mumkin. Bunday holda, buyruq qatori quyidagicha ko'rinadi:
Drayv: \ path \ name.exe argument1 argument2 ...

Buyruqlar qatori argumentlari bir yoki bir nechta bo'shliqlar bilan ajratilgan.

argv argumenti ilovaning toʻliq nomini oʻz ichiga oladi:

#o'z ichiga oladi
std nom maydonidan foydalanish;

cout<< argv << endl;

Qaytish 0;
}

Amalga oshirish natijasi

Misol: ikkita butun sonning ko'paytmasini hisoblash
Dastur bu yerdan satrni StrToInt () butun soniga aylantirish funksiyasidan foydalanadi.

#o'z ichiga oladi
std nom maydonidan foydalanish;
int StrToInt (char * s) (...)
int main (int argc, char * argv) (

Int a = 0, b = 0;

Agar (argc> 1)

a = StrToInt (argv);

Agar (argc> 2)

b = StrToInt (argv);

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

Qaytish 0;
}

Dastur sifatida ishga tushiriladi

Amalga oshirish natijasi

Buyruqlar qatori argumentlari bilan dasturni disk raskadrovka qilish

Dasturni disk raskadrovka qilishda buyruq qatori argumentlarini o'tkazish uchun menyuga o'tishingiz kerak Xususiyatlari loyiha.


Yorliqda Konfiguratsiya xususiyatlari -> Nosozliklarni tuzatish tanlang Buyruq argumentlari va ularning qiymatlarini belgilang.

Dasturni disk raskadrovka rejimida ishga tushirganingizda, kiritilgan argumentlar dastur tomonidan buyruq qatori argumentlari sifatida talqin qilinadi.