22942

ПРЕПРОЦЕСОРНІ ЗАСОБИ

Лекция

Информатика, кибернетика и программирование

імя_директиви лексемиоперанди { лексемиоперанди } Макропідстановки: define ідентифікатор послідовність_символів Сем. define begin { define end } main begin if begin end else return 0; end На виході препроцесора цей фрагмент матиме вигляд: main { if { }else return 0; } Допускаються ланцюжки макропідстановок. ...

Русский

2013-08-04

34.5 KB

3 чел.

ТЕМА: ПРЕПРОЦЕСОРНІ ЗАСОБИ.

Препроцесор є складовою системи програмування мови Сі, до якої входять також текстовий редактор, компілятор, програма-компононвщик (редактор звязків), програма-завантажувач, програма-відлагоджувач. Препроцесор  отримує на вхід текст Сі-програми з директивами препроцесора, виконує їх і вилучає з тексту. При цьому :

спочатку «склеюються рядки », тобто рядок, що закінчується символом ‘\’ з’єднується з наступним (просто відкидається пара  символів ‘\’ та ‘\n’ !). Далі програма розбивається на лексеми,  розділені символами-роздільниками. Коментарі замінюються на один пробіл. Потім препроцесор виконує безпосередньо свої директиви. Ескейп-послідовності  в символьних константах і в рядках-літералах замінюються на відповідні значення. Сусідні рядки-літерали конкатенуються.

Директиви задають певні синтаксичні перетворення тексту програми. Вони розміщуються в окремих рядках і  розпочинаються символом ‘#’/. Зона їх дії – від   директиви  до кінця текстового файлу.

 

Синт.  

            #<ім’я_директиви>  <лексеми-операнди>{  <лексеми-операнди>}

  1.  Макропідстановки:

   #define  <ідентифікатор>  <послідовність_символів>  

Сем.:  далі в тексті всі входження даного ідентифікатора  будуть  замінені на відповідну послідовність символів.        

Нпр.,    # define  begin  {

            # define  end  }

               main()

               begin

                        if (…)  begin ………… end

                                else return 0;

                end

На виході  препроцесора  цей фрагмент матиме вигляд:

               main()

               { if(…)   { …………}else return 0;

                }

Допускаються  ланцюжки  макропідстановок.

Нпр.,    # define  МАХ  1024

            # define  RANGE  MAX-32

               main()

               {  int i;

                         i=RANGE;  ....                    

                }

            # define  RANGE  1024-32

               main()

               {  int i;

                         i=RANGE;  ....   

                 }

              main()

               {  int i;

                         i=1024-32 ...                    

                }

  1.  Макроси:

   #define  <імя_макросу>(<параметр>{, <параметр>})  <тіло-макросу>  

<параметр>::=  послідовність символів

<тіло-макросу>  ::=  послідовність символів, що містить параметри

Виклик  макросу:

<імя_макросу>(<фактичний_параметр>,…, <фактичний_параметр>)

<фактичний_параметр>::= послідовність символів

Сем.   Дія макросу полягає в заміні всіх його викликів на модифіковане тіло. Модифікація тіла полягає в заміні параметрів в ньому на їх фактичні  значення.

Нпр.,  #define MAX(X,Y)  ((X>Y)?X:Y)

            main()

               {  int i;

                         i=MAX(i, 100)  ....                    

                }

            main()

               {  int i;

                         i=((i>100)?i:100)  ....                    

                }

Область дії  директиви #define …..   обмежити

директивою #undef.  

  1.  Включення файлів:

      #include <file>     для файлу з системної бібліотеки  (#include <stdio.h> )

      #includefile”      для довільного файлу  (вказується повний шлях)

  1.  Умовна компіляція:

     #if <ціл-конст-вираз>

           … text-1 ….

      #else

           text-2 …

     #endif

Якщо значення виразу 0, то компілятор не обробляє  перший текст. У супротивному пропускається другий текст.  


 

А также другие работы, которые могут Вас заинтересовать

3849. Абсолютна та відносна похибка 78.27 KB
  Абсолютна та відносна похибка. Мета роботи: вивчити і засвоїти поняття абсолютної й відносної похибки та методи їх оцінювання. Короткі теоретичні відомості. Зв'язок між кількістю точних десяткових знаків і відносною похибкою наближеного числа дається у наведеній далі теоремі.
3850. Розв’язування системи нелінійних алгебраїчних рівнянь методом простої ітерації (методом Ньютона) 63 KB
  Розв’язування системи нелінійних алгебраїчних рівнянь методом простої ітерації (методом Ньютона) Мета роботи: вивчити і засвоїти метод простої ітерації. Короткі теоретичні відомості Метод простої ітерації для розв’язування системи двох нел...
3851. Абсолютна та відносна похибка та методи оцінювання похибок 127 KB
  Чисельні методи в інформатиці: Методичні вказівки до виконання лабораторної роботи «Абсолютна та відносна похибка» для студентів базового напряму «Комп’ютерні науки» спеціальності «Інформаційні управляючі системи та технології»...
3852. Розв’язування системи лінійних алгебраїчних рівнянь методом Гауса 120 KB
  Розв’язування системи лінійних алгебраїчних рівнянь методом Гауса Мета роботи: навчитись розв’язувати систему лінійних алгебраїчних рівнянь методом Гауса. Короткі теоретичні відомості Нехай задана система п лінійних рівнянь...
3853. Обчислення означених інтегралів 79 KB
  Обчислення означених інтегралів Мета роботи: вивчити методи наближених обчислень і запрограмувати алгоритми обчислення означених інтегралів. Короткі теоретичні відомості Формули прямокутників. Нехай на відрізку задана неперервна функція . Потрібно о...
3854. Метод хорд і дотичних 135 KB
  Метод хорд і дотичних Мета роботи: вивчити і засвоїти ітераційні методи розв’язування алгебраїчних і трансцендентних рівнянь. Короткі теоретичні відомості. Метод хорд. Метод хорд – метод лінійної інтерполяції (метод пропорційних частин, ме...
3855. Інтерполяційна схема Ейткена 324 KB
  Інтерполяційна схема Ейткена Мета роботи:Засвоїти теоретичний матеріалі методи апроксимації функцій, набути практичні навики знаходження наближених значень функцій. Короткі теоретичні відомості На практиці зустрічаються випадки, коли потрібно ...
3856. Розв’язування задачі Коші методом Рунге-Кутта 163 KB
  Розв’язування задачі Кошіметодом Рунге-Кутта Мета роботи: вивчити і засвоїти постановку та методи розв’язування задачі Коші. Навчитися досліджувати розв’язок , використовуючи метод Рунге-Кутта. Короткі теоретичні відомості Тільк...
3857. Методи розв’язування диференційних рівнянь у частинних похідних 130.5 KB
  Методи розв’язування диференційних рівнянь у частинних похідних Мета роботи: Засвоїти теоретичний матеріал і методи розв’язування диференційних рівнянь у частинних похідних, набути практичні навики знаходження їхніх наближених значень...