Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП для экзаменов.docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
288.26 Кб
Скачать

3.Си тілінде жазылған программаның құрылымы

Кез келген программа бір немесе бірнеше функциялардан тұрады. Олар программа құруға керекті негізгі модульдер болып табылады. Кез келген программаның жазылған алғашқы мәтіні  бастапқы код деп ата­лады. Оны біріктірілген программалау ортасында теріп, сонан соң компилятор арқылы машиналық кодқа түрлендіріп орындаймыз.

   Сонымен, Си программасы бірнеше функциялардан (main, f1, f2…)  құралады және олардың біреуі міндетті түрде  main() болуы қажет. 

Қарапайым программаның мысалын қарастырайық. Жалпы кез кел­ген функция оның тақырыбы мен тұлғасынан (денесінен) тұрады.

Алдымен программа препроцессор арқылы өңделіп, оның дирек­тивала­рын (командаларын) орындайды. Мұнда программаға тақырып­тық файлдар – программаға қосымша элементтер енгізетін мәтіндік файлдар жазылады. Олар мәліметтерді енгізу/шығару опера­цияларын немесе экран сипаттамала­рын өзгерту үшін қажет.  

Программадағы кез келген функция тақырыбы препроцес­сор­дың дир­ек­ти­васынан және функция атынан тұрады. Функция атына жалға­сып, жақша ішіне параметрлер жазы­луы мүмкін, кейде параметр­лер болмайды, ондайда жақша ішіне ешнәрсе жазылмайды.

Препроцессор  директивалары

Си тілінің препроцессоры - макропроцессор, компиляцияның нөлдік фазасында бастапқы файл үшін қолданылады. Препроцессор директивалары - Си тіліндегі алдыңғы программада жазылған инструкциялары. Директивалары программаның кез келген жерінде жазылуы мүмкін, бірақ олардың әрекеттері программаның жазылған нүктесінен ғана басталады.

Атауланған константалар және макроанықтаулар

#define директивасы жиі қолданылатын константаларды, шешуші сөздер, операторларды түсінікті сөздермен аустыру үшін қолданылады.

Сандық және мәтіндік константаларды ауыстыратынидентификаторлар  атауланған константалар деп аталады.

Си тілінің әрекеттер тізбегі операторлар тізбегі түрінде берілгенидентификаторлар макроанықтаулар деп аталады. Макроанықтауларда аргументтер болуы мүмкін. Макроанықтауға жолығу программадамакрошақыру деп аталады.

#undef директивасы атуланған константанаң ағымдық анықтамасын тоқтатады. Тек анықтау тоқтатылғаннан кейін ғана атауланған константаға басқа мән сәйкестендіріле алады.

#define директивасы                                                   

#define <идентификатор> <мәтін>

#define <идентификатор>(<параметрлер тізімі>) <мәтін>

Директива барлық <идентификаторлар> болған файлында <мәтінге> ауыстырады.

Бұл процесс макроподстановка деп аталады. Егерде олөзімен өзгеше  лексем түрінде болса, осы жағдайда ғана <Идентификатор> өзгертіледі.

Мысалы, егер <идентификатор> жол бөлігі немесе одан әрі ұзын идентификатор болып табылса, онда ол өзгертілмейді. Егер <идентификатордан> <параметрлер тізімі> жүрсе, онда директива  аргументтермен  макроанықтаманыанықтайды.

<Мәтін> өзімен лексемдер теруін ұсынады, оның құрамына кілттік сөздер, константтар, идентификаторлар немесе өрнектер кіреді. Егер <мәтін> жолға симайтын болса, онда онда ол келесі жолда жалғастырылады; ол үшін бірінші жол соңында  кері слеш \ қойылады.

Егер < параметрлер тізімі > тапсырылса, үтірлермен бөлінген бір немесе идентификатор құрайды. Тізімде идентификаторларбір-бірінен өзге болу керек. Олардыңқозғалу обласыолардың тапсырылуымен макроопределенияменшектелген. Тізім дөңгелек жақшалармен аяқталуы керек. <Мәтінде> формалды параметрлерді макрошақырудағы фактылық аргументтер позициясымен белгіленеді.

Макрошақырудаидентификатор соңымен дөңгелек жақшада <параметр тізіміндегі> формалды параметрлер құрамынан фактылық аргументтер жазылады.

#define директивасында <Мәтін> құрамында басқада макроанықтамаларжәне констант атаулары қойылуы мүмкін. Олардың өсуіосы мәтін <идентификатор> өсуімен ғана болады, ал #define директивасының анықтамасында емес.

Макроподстановка орындалғаннан соң алынған жол тағы да басқада констант және макроанықтамалар атауларын іздеуіне қарастырылады. Қайталанып қаралғаннан ерте құралған макроподстановканы қарау қабылданбайды. Сондықтан директива

#define x x

 препроцессор зацикливаниясына әкелмейді.

Макроподстановажәне макроанықтамалар мысалдары:

#define WIDTH 80

#define LENGTH (WIDTH+10)

#define FILEMESSAGE "файлды құру мүмкіндігі дұрыс емес болды"

#define MAX(x,y) ((x)>(y)) ? (x):(y)

#define MULT (a,b) ((a)*(b))

#undef директивасы

#undef <идентификатор>

Директива <идентификатор> үшін #define болған анықтама қозғалысын тоқтатады.  #undef директива әсерімен макроопределенияны тоқтату үшін оның идентификаторын беру жеткілікті. Параметр тізімінің тапсымасы қажетті емес.

#undef директивсын бұрын анықталған идентификаторға енгізу қате емес.

Директивада кейбір бұрын анықталған идентификатордың өткен  программа обласын құрау үшін қолданылады .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]