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, то компілятор не обробляє  перший текст. У супротивному пропускається другий текст.  


 

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

67742. Функциональные и принципиальные схемы проектируемого устройства управления бытовым холодильником 378.5 KB
  Схема управления бытовым холодильником разработанная в данном курсовом проекте содержит встроенный микроконтроллер, который выполняет регулировку температуры, управление освещением, осуществляет подачу сигнала при критически высокой температуре в камере.
67743. Проектирование промышленных зданий (гараж-стоянка для грузовых и других автомобилей) 586.5 KB
  Гараж-стоянка для грузовых и других автомобилей предназначен для строительства на действующих автотранспортных предприятиях удельная площадь стоянки на одно место хранения в гараже для грузовых автомобилей составляет 33 м2 в здании предусмотрена только стоянка для автомобилей.
67744. Блок-секция поворотная 9-ти этажная на 36 квартир в п. Октябрьский 435.8 KB
  Состав комплекса работ этапа подземная часть: разработка котлована; возведение конструкций подземной части здания; устройство гидроизоляции; устройство вводов подземных коммуникаций; обратная засыпка котлована и траншей. Забивка свай: Устройство фундаментов производить...
67746. Разработка малярного отделения АТП на 411 автомобилей МАЗ-53371 3.09 MB
  Малярные работы являются завершающими при ремонте кузова автомобиля, потому в малярный участок автомобили поступают после выполнения всех видов работ. При организации работы в малярном участке наибольшее число рабочих мест создается для подготовки автомобиля к окраске.
67748. Проектирование систем отопления и вентиляции жилого дома в г.Троицкое 2.45 MB
  Цель: рассчитать толщину утепляющего слоя, термическое сопротивление ограждения и коэффициент теплопередачи. Теплотехнический расчет выполняется для наружной стены, подвального, чердачного перекрытий, наружной входной двери. Теплотехнический расчет наружной стены Определяем градусо-сутки отопительного...
67749. АРИФМЕТИКА МНОГОЧЛЕНОВ 461 KB
  Множество всех многочленов от одной переменной над полем образует коммутативное кольцо с единицей. В кольце многочленов имеет место алгоритм деления с остатком аналогичный тому который имеет место для целых чисел. Если для многочленов и в кольце существуют такие многочлены и что многочлен можно представить...
67750. Програмування в Mathcad. Освоєння основ програмування в Mathcad 59.5 KB
  Привести тестові приклади для розроблених програм Елементи вектору можуть бути дійсними або комплексними Знайти елемент вектору максимальний мінімальнний з максимальним значенням дійсної частини з мінімальним значення уявної частини максимальний по модулю...