SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Пре
процессорын
директивүүд
Lecture 11
Programming Language
Cи++ хэл дээр програм боловсруулах
 Си++ хэлэнд програмын эх код нь жирийн текст
байдаг гэдгийг дээр дурдсан.
 Хөрвүүлэгч нь үндсэндээ ийм текстийг машины хэл
рүү хөрвүүлж компьютер дээр шууд ажиллахаар
хэлбэрт оруулах үүрэгтэй.
 Энэ процесс нь үнэндээ нилээд нийлмэл процесс
бөгөөд үүнийг бид энд нарийвчлан авч үзэх гэж байна.
Юуны түрүүнд програмын эх код нь хэд хэдэн текст
файлаас бүрдэж болдог. Хөрвүүлэгчээр нэг удаа
оруулж болохуйц хэд хэдэн ийм эх файлын нэгдлийг
модуль (эсвэл хөрвүүлэлтийн буюу компиляцийн
нэгж) гэж нэрлэнэ. Нэг програм хэд хэдэн
модультай байж болно.
Cи++ хэл дээр програм боловсруулах
 Модуль болгонд үндсэн файл гэж нэрлэгдэх цор
ганц файл байх ѐстой бөгөөд энэ файл дотор
түүнтэй хөрвүүлэлтийн үед нэгтгэх бусад файлуудыг
зааж өгдөг. Энэ нэгтгэгдэж байгаа файлуудыг толгой
файлууд гэж нэрлэдэг.
 Үндсэн файлаас хэдэн ч толгой файлыг дуудан
нэгтгэж болно. Үндсэн файл нь ихэвчлэн “.cpp”,
“.cc”, эсвэл “.C” өргөлгөлтэй, толгой файл нь
ихэвчлэн “.h”, “.hpp”, эсвэл “.H” өргөтгөлтэй, стандарт
сангийн толгой файл бол өргөтгөлгүй байдаг.
Cи++ хэл дээр програм боловсруулах
 Логикийн хувьд Си хэл дээрх програм олон тооны функц
төрлийн дэд програмууд болон өгөгдлүүдээс тогтох ѐстой.
Функц нь өгөгдлийг боловсруулах үйлдлүүдийг агуулдаг. Ер
нь бол Си хэлэнд процедур төрлийн дэд програм гэж
байхгүй. Зөвхөн функц төрлийн дэд програм л
тодорхойлогдсон байдаг.
 Функцуудын дунд main гэсэн нэртэй нэг функц үндсэн
програмын үүргийг гүйцэтгэнэ. Энэ функцыг үндсэн
функц гэдэг. Үндсэн функц нь ямар ч Си-програмд
дандаа оршиж байх ѐстой. Үндсэн функцын нэрийг
дураар сонгож болохгүй бөгөөд ямагт main гэсэн нэртэй
байна. Програм ажиллаж эхлэхэд хамгийн түрүүнд энэ
функц удирдлагыг өөртөө авах бөгөөд бусад функц
эндээс дуудагдаж ажиллана
Хамгийн энгийн Си-програм нь дан ганц main
функцээс тогтсон байна. Ийм програмын бүтэц нь:
препроцессорын_директивүүд /* препроцессорын
командууд */
void main( ) /* үндсэн функцын толгой хэсэг (заавал
бичих ёстой!) */
{ /* функцын биеийн эхлэл (заавал бичих ёстой!) */
өгөгдлийг_зарлах; /* хувьсагчууд, тогтмолууд г.м. */
биелэгдэх_операторууд; /* үйлдлүүд */
} /* функцын биеийн төгсгөл (заавал бичих ёстой!) */
гэсэн хэлбэртэй.
Cи++ хэл дээр програм боловсруулах
Энэ бүтцийн дагуу хамгийн анхны, хамгийн хялбар
жишээ програмыг бичье.
програмын текст нь:
#include <stdio.h>
void main( )
{
printf (“Sain uu!n”); /*Дэлгэцэнд “Sain uu!” гэсэн
мэндчилгээ гаргана.*/
}
Препроцессор
 Хамгийн эхний: #include гэсэн мөр бол
препроцессорын директив юм.
 Тэгэхээр препроцессорын директив гэж юу вэ?
Препроцессорын директив гэдэг нь препроцессорыг
удирдагч команд юм.
 Тэгвэл препроцессор гэж юу вэ?
 Үүнд хариулахын тулд Си хэл бол дээд төвшний
програмчлалын хэл гэдгийг санацгаая. Си хэл дээр
бичсэн програмыг зөвхөн машины хэл рүү хөрвүүлсний
дараа л компьютер биелүүлж чадна. Хөрвүүлэлтийг
компилятор(хөрвүүлэгч) хэмээх програм хийдэг:
Тэгвэл препроцессор гэж юу вэ?
 Тэгвэл препроцессор гэдэг нь хөрвүүлэгч програмын тусгай
бүрдэл хэсэг юм.Препроцессорын үүрэг бол програмын те
кстийг (эх кодыг) хөрвүүлэгдэхээс нь өмнө боловсруулах
(хувиргах) явдал юм.
 Ө.х. хөрвүүлэгчийн үндсэн хэсэг ажиллаж эхлэхээс
урьтаж препроцессор ажилладаг бөгөөд эх кодыг ямар нэг
байдлаар боловсруулдаг байна.
Боловсруулагдсан текст нь мөн л Си хэл дээр байх болно.
 Харин яг яаж боловсруулах вэ гэдгийг нь програм зохиогч
өөрөө тодорхой командуудын тусламжтайгаар
препроцессорт зааж өгдөг.
 Эдгээр командыг препроцессорын директивүүд гэнэ.
 Препроцессор нь ажиллаж эхлэнгүүтээ эх кодыг мөр
мөрөөр “тандаж”, „#‟ гэсэн тэмдгээр эхлэсэн мөрүүд
байгаа эсэхийг хайдаг.
 Хэрэв ийм мөр тааралдвал түүнийг препроцессорын
директив хэмээн ойлгож, энэ директивийн дагуу текстийг
хувиргана. Тиймээс препроцессорын директив ямагт „#‟
тэмдгээр эхлэх ѐстой.
 Түүнчлэн препроцессорын директив нь дангаараа нэг мөр
болж байх ѐстой. Эдгээрийг тооцвол препроцессорын
директивийг дараах загварын дагуу бичнэ:
 #директивийн_нэр препроцессорын_лексемүүд
Энд: директивийн_нэр – тухайн нэг препроцессорын
директивийг төлөөлөх үг
препроцессорын_лексемүүд – буюу preprocessing token гэдэг
нь тэмдэгт тогтмолууд, файлын нэр, идентификаторууд,
үйлдлийн тэмдгүүд, тоонууд, мөр-тогтмолууд, мөн сул зайнаас
ялгаатай дурын тэмдэгтүүд байж болно.
Тэгвэл препроцессор гэж юу вэ?
 Си хэлэнд дараах директивүүд (директивийн нэрүүд)
тодорхойлогдсон байна. Үүнд:
 Явцын дунд бид эдгээр директивүүдтэй танилцах
болно.
Тэгвэл препроцессор гэж юу вэ?
#include директив
Энэ директив нь програмын текстэнд өөр файлаас текст
оруулж ирж тавих зориулалттай. Директивийг бичих 2 загвар
байдаг. Эхнийх нь:
#include < файлын_нэр >
Хоѐр дахь нь:
#include “файлын_нэр“
Энд: файлын_нэр - програм руу оруулах текстийг агуулсан
файлын нэр.
Препроцессор ийм директивтэй таармагцаа, заасан нэр
бүхий файлыг хайж эхлэдэг.
Хэрэв файлын нэрийг < > дотор бичсэн байвал хайлтыг
програмчлалын системийн стандарт хавтсууд дотор
тодорхой дүрмийн дагуу хийнэ. Стандарт хавтсууд гэдэг нь
хатуу диск дээр системийн үүсгэж байрласан ерөнхий
хавтас доторх дэд хавтсууд юм.
Хэрэв файлын нэрийг “ “ дотор бичсэн байвал хайлтыг манай
програмын файл байрлах тэр хавтсанд (бид програмынхаа
текстийг бичээд түүнийгээ тогтмол санах ой буюу хатуу диск
дээр файл болгож хадгалах хэрэгтэй биз дээ, сарын дараа
дахиад хэрэг болох ч юм бил үү? J) эхлэж хийгээд олдоогүй
бол харин стандарт хавтсуудаас үргэжлүүлэн хайж эхлэдэг.
 Ингээд заасан нэр бүхий файл олдвол түүний дотор
агуулагдах бүх текстийг препроцессор нь програмын текст
рүү, яг директив байрлах тэр мөрөөс эхлэн оруулж тавьдаг.
#include директив
Cи++ хэл дээр програм боловсруулах
Энэ бүтцийн дагуу хамгийн анхны, хамгийн хялбар
жишээ програмыг бичье.
програмын текст нь:
#include <stdio.h>
void main( )
{
printf (“Sain uu!n”); /*Дэлгэцэнд “Sain uu!” гэсэн
мэндчилгээ гаргана.*/
}
Жишээ
Манай жишээ програмд эхний хэлбэрийг ашигласан байгаа:
#include <stdio.h>
Энд stdio.h гэсэн файлын нэрийг бичжээ. Ө.х. энэ файлын агуулгыг
програмд оруулж ирэхээр заасан байна.
Тэгвэл энэ ямар учиртай файл вэ?
Үүнд хариулахын тулд үндсэн функцын биед буй ганц үйлдлийг
харцгаая. Энэ нь:
printf (“Sain uu!n”);
гэсэн оператор байгаа..Операторыг сайтар харах аваас printf()
гэсэн функц ба түүний аргумент болох “Sain uu!n” гэсэн мөр-
тогтмолоос бүтсэн нь мэдэгдэнэ. Энэхүү printf() функц бол гаралтын
үйлдлийг гүйцэтгэгч стандарт функц бөгөөд аргументэд нь бичсэн
өгөгдлийг гаралтын хэрэгсэлд гаргах үүрэгтэй.
 Стандарт функц гэж хэрэглэгчийн зохиогоогүй, урьдчилан
тодорхойлогдсон функцыг хэлдэг. Стандарт функц бол Си хэлэнд
өөрт нь харьяалагдахгүй, харин Си хэлний стандарт санд
харьяалагддаг юм. Стандарт сан гэж олон тооны стандарт
функцын цогцыг хэлдэг бөгөөд энэ нь хөрвүүлэгчтэй хамт ирнэ.
Тэгвэл хэлэнд өөрт нь үл харьяалагдах ийм стандарт функцыг
програмдаа ашиглахын тулд тухайн функцын талаарх тодорхой
мэдээллийг програмдаа эхлээд оруулж ирэх хэрэгтэй болдог.
Ийм мэдээлэл нь мөнхүү stdio.h гэсэн файл дотор агуулагддаг
юм. Энэ нь функцын прототип (prototype) буюу эх загвар хэмээх
бичиглэл байдаг. Тиймээс printf() гэсэн стандарт функцыг
ашиглахын тулд энэ функцын прототипийг агуулсан stdio.h файлыг
програмдаа оруулж ирэх хэрэгтэй юм.
#include <stdio.h> гэсэн директив чинь чухам үүнийг л хийгээд байгаа
юм . Одоо препроцессор манай жишээ програмын текстийг яаж
боловсруулах нь ойлгомжтой болсон байх
Жишээ
толгой файл
 h өргөтгөлтэй ийм файлыг толгой файл (header file) гэж
нэрлэнэ. Толгой файл хэмээн нэрийдсэний учир нь
түүнийг ямагт програмын текстийн эхэнд (толгойд) залгаж
байх нь зохимжтой гэдгийг зааж байгаа юм.
 Стандарт сангийн бүх функцын прототипүүд төрөл,
зориулалтаараа ангилагдан өөр өөр стандарт толгой
файлуудад хуваагдан агуулагдсан байдаг. Олон тооны
стандарт толгой файл бий.
толгой файл
 Ж.нь Турбо Си++ хөрвүүлэгчтэй хамт ирдэг стандарт
файлуудаас дурдвал:
 · alloc.h – санах ойтой ажиллах
 · assert.h – програмыг шинжлэх
 · conio.h – текст горимд оролт, гаралтын төхөөрөмжтэй ажиллах
 · ctype.h – тэмдэгттэй ажиллах
 · dos.h – MSDOS үйлдлийн системтэй ажиллах
 · errno.h – алдаа шалгах
 · float.h – бодит тоон өгөгдөлтэй ажиллах
 · graphics.h – график горимд ажиллах
 · limits.h - бүхэл тоон өгөгдлийн хязгаарын утгууд
 · math.h – математик тооцоо хийх
 · mem.h – санах ойтой ажиллах
 · signal.h – онцгой тохиолдлуудыг шийдвэрлэх
 · stdarg.h – хувьсах тооны аргументууд бүхий функцтэй ажиллах
 · stdio.h – оролт, гаралтын хэрэгслүүд
 · stdlib.h – ерөнхий хэрэглээний функцууд (мөн санах ойтой ажиллах)
 · string.h – тэмдэгт мөртэй ажиллах
 · time.h – он, сар, өдөр болон хугацаатай ажиллах
 Энд дурдаагүй өөр олон файл бий гэдгийг бас сануулъя. Дээрх толгой
файлуудын зарим нь ANSI стандартад тодорхойлогдсон бол заримыг нь
зөвхөн Турбо Си хөрвүүлэгч өөрөө нэмдэг.
 Стандарт функцтэй ажиллахын тулд стандарт санд хандалт
хийх хэрэгтэй. Стандарт санд хандахын тулд тохирох
стандарт толгой файлыг оруулах хэрэгтэй. Эс тэгвээс
хөрвүүлэгч алдаа заах болно. Түүнчлэн толгой файлын
нэрийг буруу бичсэн тохиолдолд хөрвүүлэгч мөн алдаа
заах болно. Мөн стандарт толгой файлын нэрийг ямагт < >
дотор бичих хэрэгтэй:
 #include <стандарт_толгой_файлын_нэр>
толгой файл
#include <stdio.h>
#include <conio.h>
void main( )
{
printf (“Sain uu!n”);
getch();
}
Жишээ
Макро гэж юу вэ?
 C++ ийн макро гэдэг нь програмын эх кодуудыг компайл
хийх буюу хөрвүүлж байх үед биелдэг хэсэг код юм нэг
ѐсондоо хөрвүүлэлт хийхээс өмнө компилятор макронуудыг
таньж боловсруулдаг.
 Өөрөөр хэлбэл макрод тодорхойлсон зүйлсийг эх кодноос
хайн сольж тавина.
 Хэсэг бүлэг кодыг компайл хийх явцад нөхцөлөөс хамаарч
ашиглахгүй болгох гэх мэт ашигтай зүйлс их байдаг.
 Жишээ нь програмыг debug-дах функцүүдыг өргөнөөр
ашиглаж байгаад эцсийн програмаа эдгээр debug
функцүүдгүйгээр компайлдахыг хүсвэл макродоо зааж өгөөд
компайлдахад хангалттай, мөн бас олон платформуудын
хувьд хөрвүүлэгдэж ажиллах боломжтой хүчирхэг боломжийг
энэ макро олгоно.
 Бид бүгд cryengine-ийг PC ч дэмжинэ, XBOX ч дэмжинэ, PS3 ч
дэмжинэ гэх мэтээр онцлогийг хардаг билээ. Тэгвэл тэд яаж
кодоо эдгээр олон янзын платформууд дээр нэгэн хэвийн
байдлаар ажиллах боломжтойгоор бичсэн байж таарах вэ?
 Үүний цаана C++ ийн макро хэмээх боломжийн ачаар
биеллээ олсон байдаг. Өөрөөр хэлбэл макроны
тусламжтайгаар та зөвхөн тухайн платформд ажилладаг код
болох толгой файлуудыг тодорхойлон зааж өгөх боломжтой
гэсэн үг.
Макро гэж юу вэ?
Макрог тодорхолохдоо #define түлхүүр үгийг ашигладаг. Одоо
цөмөөрөө энгийн string тодорхойлсон HELLO макро бичээд
ашиглаж үзэцгээе.
#define HELLO “Hello RRC members!”
#include <iostream>
using namespace std;
int main(void)
{
cout<<HELLO<<endl;
return 0;
}
үүнийг main.cpp гэж хадгалаад с++ -o main main.cpp гэж
хөрвүүлээд ажиллуулаарай
Макро гэж юу вэ?
$./main
$Hello RRC members! гэж хэвлэн үр дүнг харуулна..
Эндээс бид програмын кодыг хөрвүүлэх явцад макрод
тодорхойлсон утгыг эх коодонд сольж тавьдаг гэдгийг харж
болно. Өөрөөр хэлбэл програмын эх код компайл хийгдээд
макронуудыг ажиллуулж дуусах үед код дараах байдалтай
болно гэсэн үг
#include <iostream>
using namespace std;
int main(void)
{
cout<<”Hello RRC members!”<<endl;
return 0;
}
Макро гэж юу вэ?
Асуулт:
 Асуулт:
 #include директив гэж юу вэ?
 #define директив гэж юу вэ?
 Define оператор гэж юу вэ?
 #ifdef, #ifndef директивүүд гэж юу вэ?

Contenu connexe

Tendances

Tendances (20)

C++
C++C++
C++
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12
 
алгоритм 8
алгоритм 8алгоритм 8
алгоритм 8
 
Medeelel 10
Medeelel 10Medeelel 10
Medeelel 10
 
Dev c хичээл
Dev c хичээлDev c хичээл
Dev c хичээл
 
C
CC
C
 
алгоритмын бодлогууд
алгоритмын бодлогуудалгоритмын бодлогууд
алгоритмын бодлогууд
 
C cons
C consC cons
C cons
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
программ хангамжийн їндсэн ойлголт
программ хангамжийн їндсэн ойлголтпрограмм хангамжийн їндсэн ойлголт
программ хангамжийн їндсэн ойлголт
 
си хэл 10
си хэл 10си хэл 10
си хэл 10
 
Lec1 pragraming language
Lec1 pragraming languageLec1 pragraming language
Lec1 pragraming language
 
It101 lecture 7-1
It101 lecture 7-1It101 lecture 7-1
It101 lecture 7-1
 
Lecture1
Lecture1Lecture1
Lecture1
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголт
 
Өгөгдлийн бүтэц 12
Өгөгдлийн бүтэц 12Өгөгдлийн бүтэц 12
Өгөгдлийн бүтэц 12
 
мэдээллийн технологи 1 тест
мэдээллийн технологи 1 тестмэдээллийн технологи 1 тест
мэдээллийн технологи 1 тест
 
салаалсан алгоритм
салаалсан алгоритмсалаалсан алгоритм
салаалсан алгоритм
 

Similaire à Preproc (20)

C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1
 
Лекц №5
Лекц №5Лекц №5
Лекц №5
 
Ci prog tolgoi file хичээл 2
Ci prog tolgoi file хичээл 2Ci prog tolgoi file хичээл 2
Ci prog tolgoi file хичээл 2
 
си хэлний ойлголт
си хэлний ойлголтси хэлний ойлголт
си хэлний ойлголт
 
Лекц №14
Лекц №14Лекц №14
Лекц №14
 
Програмчлалын хэл
Програмчлалын хэлПрограмчлалын хэл
Програмчлалын хэл
 
онол
онолонол
онол
 
For ci
For ciFor ci
For ci
 
Lec4 хereglegchiinpunkts
Lec4 хereglegchiinpunktsLec4 хereglegchiinpunkts
Lec4 хereglegchiinpunkts
 
Unshih hewleh uildel хичээл 3
Unshih hewleh uildel хичээл 3Unshih hewleh uildel хичээл 3
Unshih hewleh uildel хичээл 3
 
лекц2
 лекц2 лекц2
лекц2
 
Лекц №9
Лекц №9Лекц №9
Лекц №9
 
C standard library
C standard libraryC standard library
C standard library
 
Лекц 1
Лекц 1Лекц 1
Лекц 1
 
Ci hel
Ci helCi hel
Ci hel
 
бие даалт
бие даалтбие даалт
бие даалт
 
бие даалт
бие даалтбие даалт
бие даалт
 
Файлын оролт гаралт
Файлын оролт гаралтФайлын оролт гаралт
Файлын оролт гаралт
 
лабораторийн ажилUud
лабораторийн ажилUudлабораторийн ажилUud
лабораторийн ажилUud
 
Its150 l10powerpoint2007
Its150 l10powerpoint2007Its150 l10powerpoint2007
Its150 l10powerpoint2007
 

Plus de Bayalagmaa Davaanyam

Online applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cardsOnline applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cardsBayalagmaa Davaanyam
 
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудалМэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудалBayalagmaa Davaanyam
 
Мод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимМод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимBayalagmaa Davaanyam
 
Эрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудЭрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудBayalagmaa Davaanyam
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 

Plus de Bayalagmaa Davaanyam (10)

Online applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cardsOnline applications using strong authentication with OTP grid cards
Online applications using strong authentication with OTP grid cards
 
otp crid cards
otp crid cardsotp crid cards
otp crid cards
 
Social sciences bayalagmaa
Social sciences bayalagmaaSocial sciences bayalagmaa
Social sciences bayalagmaa
 
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудалМэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
Мэдээлэл технологи ашиглан лекцийн үр дүнг дээшлүүлэх асуудал
 
Мод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимМод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчим
 
Hash function
Hash functionHash function
Hash function
 
Эрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудЭрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргууд
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 

Preproc

  • 2. Cи++ хэл дээр програм боловсруулах  Си++ хэлэнд програмын эх код нь жирийн текст байдаг гэдгийг дээр дурдсан.  Хөрвүүлэгч нь үндсэндээ ийм текстийг машины хэл рүү хөрвүүлж компьютер дээр шууд ажиллахаар хэлбэрт оруулах үүрэгтэй.  Энэ процесс нь үнэндээ нилээд нийлмэл процесс бөгөөд үүнийг бид энд нарийвчлан авч үзэх гэж байна. Юуны түрүүнд програмын эх код нь хэд хэдэн текст файлаас бүрдэж болдог. Хөрвүүлэгчээр нэг удаа оруулж болохуйц хэд хэдэн ийм эх файлын нэгдлийг модуль (эсвэл хөрвүүлэлтийн буюу компиляцийн нэгж) гэж нэрлэнэ. Нэг програм хэд хэдэн модультай байж болно.
  • 3. Cи++ хэл дээр програм боловсруулах  Модуль болгонд үндсэн файл гэж нэрлэгдэх цор ганц файл байх ѐстой бөгөөд энэ файл дотор түүнтэй хөрвүүлэлтийн үед нэгтгэх бусад файлуудыг зааж өгдөг. Энэ нэгтгэгдэж байгаа файлуудыг толгой файлууд гэж нэрлэдэг.  Үндсэн файлаас хэдэн ч толгой файлыг дуудан нэгтгэж болно. Үндсэн файл нь ихэвчлэн “.cpp”, “.cc”, эсвэл “.C” өргөлгөлтэй, толгой файл нь ихэвчлэн “.h”, “.hpp”, эсвэл “.H” өргөтгөлтэй, стандарт сангийн толгой файл бол өргөтгөлгүй байдаг.
  • 4. Cи++ хэл дээр програм боловсруулах  Логикийн хувьд Си хэл дээрх програм олон тооны функц төрлийн дэд програмууд болон өгөгдлүүдээс тогтох ѐстой. Функц нь өгөгдлийг боловсруулах үйлдлүүдийг агуулдаг. Ер нь бол Си хэлэнд процедур төрлийн дэд програм гэж байхгүй. Зөвхөн функц төрлийн дэд програм л тодорхойлогдсон байдаг.  Функцуудын дунд main гэсэн нэртэй нэг функц үндсэн програмын үүргийг гүйцэтгэнэ. Энэ функцыг үндсэн функц гэдэг. Үндсэн функц нь ямар ч Си-програмд дандаа оршиж байх ѐстой. Үндсэн функцын нэрийг дураар сонгож болохгүй бөгөөд ямагт main гэсэн нэртэй байна. Програм ажиллаж эхлэхэд хамгийн түрүүнд энэ функц удирдлагыг өөртөө авах бөгөөд бусад функц эндээс дуудагдаж ажиллана
  • 5. Хамгийн энгийн Си-програм нь дан ганц main функцээс тогтсон байна. Ийм програмын бүтэц нь: препроцессорын_директивүүд /* препроцессорын командууд */ void main( ) /* үндсэн функцын толгой хэсэг (заавал бичих ёстой!) */ { /* функцын биеийн эхлэл (заавал бичих ёстой!) */ өгөгдлийг_зарлах; /* хувьсагчууд, тогтмолууд г.м. */ биелэгдэх_операторууд; /* үйлдлүүд */ } /* функцын биеийн төгсгөл (заавал бичих ёстой!) */ гэсэн хэлбэртэй.
  • 6. Cи++ хэл дээр програм боловсруулах Энэ бүтцийн дагуу хамгийн анхны, хамгийн хялбар жишээ програмыг бичье. програмын текст нь: #include <stdio.h> void main( ) { printf (“Sain uu!n”); /*Дэлгэцэнд “Sain uu!” гэсэн мэндчилгээ гаргана.*/ }
  • 7. Препроцессор  Хамгийн эхний: #include гэсэн мөр бол препроцессорын директив юм.  Тэгэхээр препроцессорын директив гэж юу вэ? Препроцессорын директив гэдэг нь препроцессорыг удирдагч команд юм.  Тэгвэл препроцессор гэж юу вэ?  Үүнд хариулахын тулд Си хэл бол дээд төвшний програмчлалын хэл гэдгийг санацгаая. Си хэл дээр бичсэн програмыг зөвхөн машины хэл рүү хөрвүүлсний дараа л компьютер биелүүлж чадна. Хөрвүүлэлтийг компилятор(хөрвүүлэгч) хэмээх програм хийдэг:
  • 8.
  • 9. Тэгвэл препроцессор гэж юу вэ?  Тэгвэл препроцессор гэдэг нь хөрвүүлэгч програмын тусгай бүрдэл хэсэг юм.Препроцессорын үүрэг бол програмын те кстийг (эх кодыг) хөрвүүлэгдэхээс нь өмнө боловсруулах (хувиргах) явдал юм.  Ө.х. хөрвүүлэгчийн үндсэн хэсэг ажиллаж эхлэхээс урьтаж препроцессор ажилладаг бөгөөд эх кодыг ямар нэг байдлаар боловсруулдаг байна. Боловсруулагдсан текст нь мөн л Си хэл дээр байх болно.  Харин яг яаж боловсруулах вэ гэдгийг нь програм зохиогч өөрөө тодорхой командуудын тусламжтайгаар препроцессорт зааж өгдөг.  Эдгээр командыг препроцессорын директивүүд гэнэ.
  • 10.  Препроцессор нь ажиллаж эхлэнгүүтээ эх кодыг мөр мөрөөр “тандаж”, „#‟ гэсэн тэмдгээр эхлэсэн мөрүүд байгаа эсэхийг хайдаг.  Хэрэв ийм мөр тааралдвал түүнийг препроцессорын директив хэмээн ойлгож, энэ директивийн дагуу текстийг хувиргана. Тиймээс препроцессорын директив ямагт „#‟ тэмдгээр эхлэх ѐстой.  Түүнчлэн препроцессорын директив нь дангаараа нэг мөр болж байх ѐстой. Эдгээрийг тооцвол препроцессорын директивийг дараах загварын дагуу бичнэ:  #директивийн_нэр препроцессорын_лексемүүд Энд: директивийн_нэр – тухайн нэг препроцессорын директивийг төлөөлөх үг препроцессорын_лексемүүд – буюу preprocessing token гэдэг нь тэмдэгт тогтмолууд, файлын нэр, идентификаторууд, үйлдлийн тэмдгүүд, тоонууд, мөр-тогтмолууд, мөн сул зайнаас ялгаатай дурын тэмдэгтүүд байж болно. Тэгвэл препроцессор гэж юу вэ?
  • 11.  Си хэлэнд дараах директивүүд (директивийн нэрүүд) тодорхойлогдсон байна. Үүнд:  Явцын дунд бид эдгээр директивүүдтэй танилцах болно. Тэгвэл препроцессор гэж юу вэ?
  • 12. #include директив Энэ директив нь програмын текстэнд өөр файлаас текст оруулж ирж тавих зориулалттай. Директивийг бичих 2 загвар байдаг. Эхнийх нь: #include < файлын_нэр > Хоѐр дахь нь: #include “файлын_нэр“ Энд: файлын_нэр - програм руу оруулах текстийг агуулсан файлын нэр. Препроцессор ийм директивтэй таармагцаа, заасан нэр бүхий файлыг хайж эхлэдэг. Хэрэв файлын нэрийг < > дотор бичсэн байвал хайлтыг програмчлалын системийн стандарт хавтсууд дотор тодорхой дүрмийн дагуу хийнэ. Стандарт хавтсууд гэдэг нь хатуу диск дээр системийн үүсгэж байрласан ерөнхий хавтас доторх дэд хавтсууд юм.
  • 13. Хэрэв файлын нэрийг “ “ дотор бичсэн байвал хайлтыг манай програмын файл байрлах тэр хавтсанд (бид програмынхаа текстийг бичээд түүнийгээ тогтмол санах ой буюу хатуу диск дээр файл болгож хадгалах хэрэгтэй биз дээ, сарын дараа дахиад хэрэг болох ч юм бил үү? J) эхлэж хийгээд олдоогүй бол харин стандарт хавтсуудаас үргэжлүүлэн хайж эхлэдэг.  Ингээд заасан нэр бүхий файл олдвол түүний дотор агуулагдах бүх текстийг препроцессор нь програмын текст рүү, яг директив байрлах тэр мөрөөс эхлэн оруулж тавьдаг. #include директив
  • 14. Cи++ хэл дээр програм боловсруулах Энэ бүтцийн дагуу хамгийн анхны, хамгийн хялбар жишээ програмыг бичье. програмын текст нь: #include <stdio.h> void main( ) { printf (“Sain uu!n”); /*Дэлгэцэнд “Sain uu!” гэсэн мэндчилгээ гаргана.*/ }
  • 15. Жишээ Манай жишээ програмд эхний хэлбэрийг ашигласан байгаа: #include <stdio.h> Энд stdio.h гэсэн файлын нэрийг бичжээ. Ө.х. энэ файлын агуулгыг програмд оруулж ирэхээр заасан байна. Тэгвэл энэ ямар учиртай файл вэ? Үүнд хариулахын тулд үндсэн функцын биед буй ганц үйлдлийг харцгаая. Энэ нь: printf (“Sain uu!n”); гэсэн оператор байгаа..Операторыг сайтар харах аваас printf() гэсэн функц ба түүний аргумент болох “Sain uu!n” гэсэн мөр- тогтмолоос бүтсэн нь мэдэгдэнэ. Энэхүү printf() функц бол гаралтын үйлдлийг гүйцэтгэгч стандарт функц бөгөөд аргументэд нь бичсэн өгөгдлийг гаралтын хэрэгсэлд гаргах үүрэгтэй.
  • 16.  Стандарт функц гэж хэрэглэгчийн зохиогоогүй, урьдчилан тодорхойлогдсон функцыг хэлдэг. Стандарт функц бол Си хэлэнд өөрт нь харьяалагдахгүй, харин Си хэлний стандарт санд харьяалагддаг юм. Стандарт сан гэж олон тооны стандарт функцын цогцыг хэлдэг бөгөөд энэ нь хөрвүүлэгчтэй хамт ирнэ. Тэгвэл хэлэнд өөрт нь үл харьяалагдах ийм стандарт функцыг програмдаа ашиглахын тулд тухайн функцын талаарх тодорхой мэдээллийг програмдаа эхлээд оруулж ирэх хэрэгтэй болдог. Ийм мэдээлэл нь мөнхүү stdio.h гэсэн файл дотор агуулагддаг юм. Энэ нь функцын прототип (prototype) буюу эх загвар хэмээх бичиглэл байдаг. Тиймээс printf() гэсэн стандарт функцыг ашиглахын тулд энэ функцын прототипийг агуулсан stdio.h файлыг програмдаа оруулж ирэх хэрэгтэй юм. #include <stdio.h> гэсэн директив чинь чухам үүнийг л хийгээд байгаа юм . Одоо препроцессор манай жишээ програмын текстийг яаж боловсруулах нь ойлгомжтой болсон байх Жишээ
  • 17. толгой файл  h өргөтгөлтэй ийм файлыг толгой файл (header file) гэж нэрлэнэ. Толгой файл хэмээн нэрийдсэний учир нь түүнийг ямагт програмын текстийн эхэнд (толгойд) залгаж байх нь зохимжтой гэдгийг зааж байгаа юм.  Стандарт сангийн бүх функцын прототипүүд төрөл, зориулалтаараа ангилагдан өөр өөр стандарт толгой файлуудад хуваагдан агуулагдсан байдаг. Олон тооны стандарт толгой файл бий.
  • 18. толгой файл  Ж.нь Турбо Си++ хөрвүүлэгчтэй хамт ирдэг стандарт файлуудаас дурдвал:  · alloc.h – санах ойтой ажиллах  · assert.h – програмыг шинжлэх  · conio.h – текст горимд оролт, гаралтын төхөөрөмжтэй ажиллах  · ctype.h – тэмдэгттэй ажиллах  · dos.h – MSDOS үйлдлийн системтэй ажиллах  · errno.h – алдаа шалгах  · float.h – бодит тоон өгөгдөлтэй ажиллах  · graphics.h – график горимд ажиллах  · limits.h - бүхэл тоон өгөгдлийн хязгаарын утгууд  · math.h – математик тооцоо хийх  · mem.h – санах ойтой ажиллах  · signal.h – онцгой тохиолдлуудыг шийдвэрлэх  · stdarg.h – хувьсах тооны аргументууд бүхий функцтэй ажиллах  · stdio.h – оролт, гаралтын хэрэгслүүд  · stdlib.h – ерөнхий хэрэглээний функцууд (мөн санах ойтой ажиллах)  · string.h – тэмдэгт мөртэй ажиллах  · time.h – он, сар, өдөр болон хугацаатай ажиллах  Энд дурдаагүй өөр олон файл бий гэдгийг бас сануулъя. Дээрх толгой файлуудын зарим нь ANSI стандартад тодорхойлогдсон бол заримыг нь зөвхөн Турбо Си хөрвүүлэгч өөрөө нэмдэг.
  • 19.  Стандарт функцтэй ажиллахын тулд стандарт санд хандалт хийх хэрэгтэй. Стандарт санд хандахын тулд тохирох стандарт толгой файлыг оруулах хэрэгтэй. Эс тэгвээс хөрвүүлэгч алдаа заах болно. Түүнчлэн толгой файлын нэрийг буруу бичсэн тохиолдолд хөрвүүлэгч мөн алдаа заах болно. Мөн стандарт толгой файлын нэрийг ямагт < > дотор бичих хэрэгтэй:  #include <стандарт_толгой_файлын_нэр> толгой файл
  • 20. #include <stdio.h> #include <conio.h> void main( ) { printf (“Sain uu!n”); getch(); } Жишээ
  • 21. Макро гэж юу вэ?  C++ ийн макро гэдэг нь програмын эх кодуудыг компайл хийх буюу хөрвүүлж байх үед биелдэг хэсэг код юм нэг ѐсондоо хөрвүүлэлт хийхээс өмнө компилятор макронуудыг таньж боловсруулдаг.  Өөрөөр хэлбэл макрод тодорхойлсон зүйлсийг эх кодноос хайн сольж тавина.  Хэсэг бүлэг кодыг компайл хийх явцад нөхцөлөөс хамаарч ашиглахгүй болгох гэх мэт ашигтай зүйлс их байдаг.  Жишээ нь програмыг debug-дах функцүүдыг өргөнөөр ашиглаж байгаад эцсийн програмаа эдгээр debug функцүүдгүйгээр компайлдахыг хүсвэл макродоо зааж өгөөд компайлдахад хангалттай, мөн бас олон платформуудын хувьд хөрвүүлэгдэж ажиллах боломжтой хүчирхэг боломжийг энэ макро олгоно.
  • 22.  Бид бүгд cryengine-ийг PC ч дэмжинэ, XBOX ч дэмжинэ, PS3 ч дэмжинэ гэх мэтээр онцлогийг хардаг билээ. Тэгвэл тэд яаж кодоо эдгээр олон янзын платформууд дээр нэгэн хэвийн байдлаар ажиллах боломжтойгоор бичсэн байж таарах вэ?  Үүний цаана C++ ийн макро хэмээх боломжийн ачаар биеллээ олсон байдаг. Өөрөөр хэлбэл макроны тусламжтайгаар та зөвхөн тухайн платформд ажилладаг код болох толгой файлуудыг тодорхойлон зааж өгөх боломжтой гэсэн үг. Макро гэж юу вэ?
  • 23. Макрог тодорхолохдоо #define түлхүүр үгийг ашигладаг. Одоо цөмөөрөө энгийн string тодорхойлсон HELLO макро бичээд ашиглаж үзэцгээе. #define HELLO “Hello RRC members!” #include <iostream> using namespace std; int main(void) { cout<<HELLO<<endl; return 0; } үүнийг main.cpp гэж хадгалаад с++ -o main main.cpp гэж хөрвүүлээд ажиллуулаарай Макро гэж юу вэ?
  • 24. $./main $Hello RRC members! гэж хэвлэн үр дүнг харуулна.. Эндээс бид програмын кодыг хөрвүүлэх явцад макрод тодорхойлсон утгыг эх коодонд сольж тавьдаг гэдгийг харж болно. Өөрөөр хэлбэл програмын эх код компайл хийгдээд макронуудыг ажиллуулж дуусах үед код дараах байдалтай болно гэсэн үг #include <iostream> using namespace std; int main(void) { cout<<”Hello RRC members!”<<endl; return 0; } Макро гэж юу вэ?
  • 25.
  • 26. Асуулт:  Асуулт:  #include директив гэж юу вэ?  #define директив гэж юу вэ?  Define оператор гэж юу вэ?  #ifdef, #ifndef директивүүд гэж юу вэ?