Առաջին ծրագիրը
Մի որևէ ծրագրավորման լեզվի ուսումնասիրությունը սկսելիս առաջին ծրագիրն ընտրում են այնպես, որ այն չպարունակի բարդ լեզվական ու ալգորիթմական կառուցվածքներ, բայց սկսնակ ծրագրավորողին հնարավորություն տա ամբողջությամբ տեսնել մեկ ծրագրի կյանքը՝ ստեղծումից մինչև կատարում։ 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
Միշտ չէ, որ թարգմանության պրոցեսն այդպես հարթ է անցում։ ... ««սխալների մասին»»