Առաջին ծրագիրը

Մի որևէ ծրագրավորման լեզվի ուսումնասիրությունը սկսելիս առաջին ծրագիրն ընտրում են այնպես, որ այն չպարունակի բարդ լեզվական ու ալգորիթմական կառուցվածքներ, բայց սկսնակ ծրագրավորողին հնարավորություն տա ամբողջությամբ տեսնել մեկ ծրագրի կյանքը՝ ստեղծումից մինչև կատարում։ C++ լեզվով գրված մեր առաջին ծրագիրն էլ բարդ չէ․ այն արտածման ստանդարտ հոսքին է դուրս բերում «Ողջո՜ւյն, աշխա՛րհ։» տեքստը։

Գործարկենք տեքստային խմբագրիչը (կամ ծրագրերի մշակման ինտեգրացված միջավայրը ― IDE) և նրա օգնությամբ ստեղծենք ex01.cpp ֆայլը՝ հետևյալ պարունակությամբ․

// Առաջին C++ ծրագիրը
#include <iostream>

int main()
{
    std::cout << "Ողջո՜ւյն, աշխա՛րհ։\n"
}

Ծրագրի տեքստը ֆայլում գրառելուց հետո այն պետք է կոմպիլյատորի օգնությամբ թարգմանել մեքենայական հրամանների և կատարել։ Բայց, մինչև այս քայլերի մանրամասն նկարագրությունը, մի փոքր առաջ անցնենք ու ծրագրի ամեն մի տողի համար տանք համառոտ մեկնաբանություն։

Առաջին տողը // նիշերով սկսվող և մինչև տողի վերջը շարունակվող մեկնաբանություն է։ Մեկնաբանությունները, որոնք կարող են պարունակել կամայական տեքստ, ծրագրի իմաստի վրա չեն ազդում և ամբողջովին անտեսվում են կոմպիլյատորի կողմից։ Դրանք ծառայում են մարդ-ընթերցողին ծրագրի մասին լրացուցիչ տեղեկություններ տրամադրելու համար։

Երկրորդ տողում գրված #include հրահանգը նախապրոցեսորից (preprocessor) պահանջում է ծրագրի տեքստին կցել iostream գրադարանային ֆայլի պարունակությունը։ Այս ֆայլում են սահմանված ներմուծման ու արտածման ստանդարտ հոսքերի հետ աշխատող գործողություններն ու օբյեկտները։ Ի թիվս զանազան ֆունկցիաների ու օբյեկտների, iostream ֆայլը պարունակում է արտածման ստանդարտ հոսքի հետ կապված cout օբյեկտը, և իր աջ արգումենտը ձախ արգումենտի մեջ ուղարկող << գործողությունը։

C++ լեզվով գրված ամեն մի ծրագիր պետք է պարունակի main անունով միակ ֆունկցիա։ Այս ֆունկցիան հանդիսանում է ծրագրի մուտքի կետը, այսինքն՝ ծրագրիրը սկսում է կատարվել main ֆունկցիայից։ Ավելի պատկերավոր ասած՝ ծրագիրը կատարելու համար օպերացիոն համակարգը կանչում է main ֆունկցիան։ Տվյալ դեպքում main ֆունկցիան պարամետրեր չունի և վերադարձնում է int (integer, ամբողջ թիվ) տիպի արժեք։ UNIX/Linux օպերացիոն համակարգերն այս ֆունկցիայի արժեքը մեկնաբանում են որպես ծրագրի հաջող կամ անհաջող ավարտի ազդանշան։ Ըստ պայմանավորվածության, 0 արժեքը համարվում է հաջող ավարտ, իսկ 0֊ից տարբեր դրական ամբողջ թվերը՝ անհաջող ավարտ։ C++ ֆունկցիայից որևէ արժեք է վերադարձվում է return հրամանով։ Սակայն միայն main ֆունկցիայի համար կա բացառություն, որ, եթե բացահայտորեն նշված չէ return հրամանը, ապա վերադարձվող արժեքը համարվում է 0։

main ֆունկցիայի մարմինը, որ պարփակված է { և } փակագծերի մեջ, պարունակում է միակ արտահայտություն, որում << գործողության օգնությամբ «Ողջո՜ւյն, աշխա՛րհ։» տողն ուղարկվում է արտածման ստանդարտ հոսքի հետ կապված cout օբյեկտին։ :: գործողությամբ cout անունին կցված std նախդիրը ցույց է տալիս, որ այդ երկու անունները պատկանում են լեզվի Կաղապարների ստանդարտ գրադարանի (Standard template library, STL) անունների տիրույթին։ (Ֆունկցիաների հայտարման, սահմանման և կիրառման մասնին մանրամասնորեն խոսում ենք ?? գլխում։)

Հիմա այս ծրագիրը թարգմանենք՝ կոմպիլյացնենք, մեքենայական կոդի և աշխատեցնենք։ C++ լեզվով գրված ծրագիրը թարգմանության ժամանակ անցնում է երեք հիմնական փուլ. i. նախնական մշակում (preprocessing) -- մշակվում են # նիշով սկսվող հրահանգները, որոնք ծրագրի հետ կատարում են զուտ տեքստային գործողություններ։ Օրինակ, ֆայլերի կցում, անունների փոխարինում արժեքներով և այլն, ii. թարգմանություն (compilation) -- ծրագրավորողի գրած տեքստը թարգմանվում է մեքենայական կոդի և ստեղծվում է, այսպես կոչված, օբյեկտային ֆայլ, iii. կապակցում կամ կապերի խմբագրում (linking) -- ստեղծված օբյեկտային ֆայլերը կապակցվում են գրադարանային (կամ այլ) օբյեկտային ֆայլերի հետ և կառուցվում է կատարվող մոդուլ։

Սովորաբար ծրագրի տեքստից կատարվող մոդուլի ստացման այս երեք փուլերը թաքնված են օգտագործողից և, պարզ ծրագերի դեպքում, կատարվում են մեկ հրամանով։ Օրինակ, Bash ինտերպրետատորի հրամանային տողում ներմուծենք հետևյալը.

$ c++ ex01.cpp

Եթե կոմպիլյատորը որևէ սխալ չի հայտնաբերել, ապա ընթացիկ պանակում ստեղծվում է a.out անունով կատարվող մոդուլը։ Եթե հարկավոր է կատարվող մոդուլին այլ անուն տալ, ապա այն պետք է նշել որպես կոմպիլյատորի -o պարամետրի արժեք։ Օրինակ.

$ c++ -o ex01 ex01.cpp

այս հրամանի հաջող կատարման արդյունքում կատարվող մոդուլը, a.out֊ի փոխարեն, ստանում է ex01 անունը։

ex01 մոդուլն աշխատեցնելու համար պետք է Bash֊ի հրամանային տողում ներմուծել.

$ ./ex01
Ողջո՜ւյն, աշխա՛րհ։

Ծրագրի կատարման արդյունքում տեսնում ենք արտածված տողը. սա հենց այն է, ինչ ակնկալում էինք առաջին ծրագրից։

Որպեսզի համոզվենք, որ իսկապես main ֆունկցիայի վերադարձրած արժեքը փոխանցվում է օպերացիոն համակարգին, ծրագրի կատարումից հետո Bash ինտերպրետատորի echo հրամանով դուրս բերենք $? փսևդոփոփոխականի արժեքը։

$ echo $?
0

Հիմա վերը բերված օրինակի ex01.cpp ֆայլը պատճենենք ex02.cpp անունով, և main ֆունկցիայի մարմինն ավարտող } փակագծից առաջ ավելացնենք «return 7;» հրամանը։

#include <iostream>

int main()
{
    std::cout << "Ողջո՜ւյն, աշխա՛րհ։\n";
    return 7;
}

Ապա նորից թարգմանենք ծրագիրը, աշխատեցնենք ու արտածենք $? փսևդոփոփոխականի արժեքը։ Հրամանների հաջորդականությունը և արտածված արդյունքները հետևյալ տեսքն ունեն.

$ c++ -o ex02 ex02.cpp
$ ./ex02
Ողջո՜ւյն, աշխա՛րհ։
$ echo $?
7

Միշտ չէ, որ թարգմանության պրոցեսն այդպես հարթ է անցում։ ... ««սխալների մասին»»

results matching ""

    No results matching ""