Дотоод функц ашиглан тойргийн талбай болон уртыг олох програм бич.
Эхний лаборатори нэг иймэрхүү байна даа. Хамгийн гол нь дотоод функц (inline function) ашиглах нь чухал юм. Дотоод функцын тухай цухас тэмдэглэл хийчихье.
Энгийн функцыг санаж байгаа байх.
Програм үндсэн фукц (main function - дугаар 8)-аас эхэлж ажиллуулж эхлэх бөгөөд func функц (дугаар 10)-ыг дуудна. Тэгээд яг одоо байгаа удирдлагын хаягийг санаж аваад func функцын эх биерүү үсэрнэ (дугаар 3 руу). Функцыг биелүүлж дууссаны дараа буцаад анхны санасан хаягтаа буцана.
Функцын давуу тал бол санах ойг хэмнэнэ, програмчлах ажлыг хөнгөвчлөнө, модулийн програмчлалыг дэмжинэ, засаж сайжруулахад хялбар болгодог. Гэвч нэг функц маань жижигхэн, түүнийг олон дахин дуудах хэрэгтэй үед функц маань програмын хурдан муу нөлөө үзүүлж эхэлнэ.
Жишээ нь func функцыг 100 удаа дуудъя. Тэгвэл 100 удаа удирдлага функц дуудсан хаягийг хадгалана, 100 удаа функцруу үсэрнэ, 100 удаа функцээ ажиллуулна, 100 удаа удирдлага буцаж ирнэ гэсэн үг. Тиймээс програмын хурданд их нөлөө үзүүлж байгаа юм. Хамгийн гол нь функц маань жижигхэн. Ийм жижигхэн функцыг ажиллуулахын тулд ийм их ажиллагаа орж байгаа нь гол асуудал юм.
Харин дотоод функц маань энгийн функцээс жаахан ялгаатай. Тэр нь юу вэ? гэвэл дотоод функцыг дуудахад функцын эх биерүү үсрэх биш харин функцын командуудыг дуудсан хэсэг оруулан ажиллуулдаг. За ёстой өөрөө ч ойлгохооргүй биччихлээ.
За дотоод функ болгоод биччихлээ. Ингээд биччихвэл func функцыг (10-р мөр) дуудахад удирдлага func функцын эх биерүү (3-р мөррүү) үсрэх биш func() (10-р) функцын оронд функцын эх бие хуулагдан ажиллана. Өөрөөр хэлбэл
Ийм болсонтой адил гэсэн үг. Тэгсэн хөөе, заавал ийм балай юм бичих хэрэг байгаа юм уу? Макро гэдэг бүтэц байгаа ш дээ гэх байх. Макрог дуудахад макрогийн эх бие тэр чигээрээ хуулагддаг. Дээрх дотоод функцтэй програмыг макрогоо бичиж үзье.Үр дүн нь яг адилхан. Яг адилхан зарчимтайгаар func-ын оронд cout<<"Hi, all" гэсэн мөр орлогдон тавигдана. Гэвч дотоод функц маань макрогоо давуу талтай.
Дараах жишээгээр тайлбарлая.
За хоёр тооны ихийг олдог хоёр програм. Эхнийх нь max гэсэн макрогоор. Хоёр дахь max гэсэн дотоод функцээр. Хоёулаа эх биеэ дуудалтандаа хуулж ажиллуулдаг. Гэхдээ макрогоор бичихэд max-д буцаах утга гэж байхгүй, аргументуудынх нь өгөгдлийн төрөл (datatype)-г заахгүй бол дотоод функцэд эдгээр бүгдийг зааж өгсөн байдаг. Өөрөөр хэлбэл дотоод функц нь макрогийн сайжруулсан бүтэц юм. Дотоод функц нь Си++ дээр бий болсон бүтэц. Си хэлэнд байдаггүй билээ.
За ингээд үндсэн ажил руугаа оръё. Бодлогоо бодъё.
Гаралт нь:
Өө их гоё, цааш нь үргэлжлүүлээд байгаарай хамаа! Чамаас суралцах юм зөндөө байна маньд нь :-P
ReplyDelete