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

2 чел.

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

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

спочатку «склеюються рядки », тобто рядок, що закінчується символом ‘\’ з’єднується з наступним (просто відкидається пара  символів ‘\’ та ‘\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, то компілятор не обробляє  перший текст. У супротивному пропускається другий текст.  


 

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

68609. Основы электротехники и электроники: Методические указания 979.07 KB
  Объём с содержание лабораторных и практических работ определяется рабочей программой дисциплины Основы электротехники и электроники При выборе содержания и объёма лабораторных и практических работ исходят из сложностей учебного материала для усвоения из внутрипредметных и межпредметных связей...
68610. Практикум по линейной алгебре и аналитической геометрии в среде MATLAB 1.12 MB
  Цели работы. Работа с графикой: построение векторов на плоскости и в пространстве. Работа с М-файлами. Приобретение навыков решения задач векторной алгебры с помощью средств системы MATLAB. Освоение с помощью графических иллюстраций MATLAB фундаментальных понятий векторной алгебры...
68614. Експериментальне дослідження основних законів розподілу випадкових величин, що застосовуються в теорії надійності 412 KB
  Властивості випадкових величин описуються за допомогою законів розподілу під якими розуміють будьяке співвідношення що встановлює взаємозв’язок між можливими значеннями випадкової величини і відповідними їм імовірностями. Тоді функцією розподілу Fx випадкової величини X називається функція Fx = P X x.
68615. Обробка експериментальних статистичних даних про відмови елементів технічних систем. Визначення закону розподілу випадкової величини 265.5 KB
  Мета лабораторної роботи набути навиків щодо обробки експериментальних статистичних даних появи випадкової величини та визначення закону її розподілу. Основні теоретичні відомості Властивості випадкових величин описуються за допомогою законів розподілу під якими розуміють будь-яке співвідношення...
68616. Визначення критеріїв відмови складних топологічних світлосигнальних систем при різних показниках надійності їх елементів 182.5 KB
  Рівень безпеки і регулярності польотів на етапі візуального пілотування в складних метеорологічних умовах СМУ визначається правильним функціонуванням світлосигнальної системи аеродрому ССА тому до показників її надійності ставляться жорсткі вимоги.