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


 

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

43799. Татарча-русча сүзлекләрдә тамыр рәвешендәге гарәп-фарсы алынмалары 295 KB
  Татар теленнән аермалы буларак, гарәп телендә сузыкларның әйтелеше тартыкларга бәйле. Сүздә нинди тартыклар белән килүенә карап, сузык авазның әйтелеше үзгәрә, ягъни сөйләмдә фонеманың төрле вариантлары барлыкка килә. Мәсәлән, а сузыгы эмфатик һәм башка кайбер тартыклар
43800. Использование метода проектов на формирование речевой компетенции на уроке иностранного языка 1.86 MB
  Психолого педагогические исследования по проблемам формирования речевых навыков на уроках иностранного языка. Опытнопрактические работы по использованию методов проектов как средство формирования речевых умений на уроках иностранного языка. Основная идея подобного подхода к обучению английского языка таким образом заключается в том чтобы перенести акцент со всякого рода упражнений на активную мыслительную деятельность учащихся требующую для своего оформления владения определенными языковыми средствами. Только метод проектов...
43801. Внутрихозяйственное землеустройство крестьянско-фермерского хозяйства «ДИДИНАГ» 98.87 KB
  После 1996 года были свернуты работы по оказанию помощи хозяйствам в осуществлении проектов внутрихозяйственного землеустройства авторскому надзору и составлению рабочих проектов по улучшению и охране земель даже на сельскохозяйственных землях находящихся в федеральной собственности. Состав и содержание проекта зависят от природных и социальноэкономических условий форм землевладения и землепользования специализации хозяйства состава и соотношения отраслей условий расселения развития элементов инфраструктуры. Размещение...
43803. Проект внутрихозяйственного землеустройства крестьянско-фермерского хозяйства «ДИДИНАГ» 124.15 KB
  В вышеперечисленных составных частях проекта внутрихозяйственного землеустройства разрабатываются общехозяйственные вопросы, создающие в итоге производственную структурную основу организации территории. Дальнейшая задача заключается в устройстве территории отдельных видов угодий, разделение их на обособленные хозяйственные участки: поля севооборотов, загоны очередного стравливания на пастбищах, сенокосооборотные и бригадные участки на сенокосах.
43804. Разрушительные процессы, происходящие в изоляции кабельных линий электропередач 313.46 KB
  Токопроводящие жилы предназначены для прохождения электрического тока, они бывают основными и нулевыми. Основные жилы применяются для выполнения основной функции силового кабеля- передачи по ним электроэнергии. Нулевые жилы предназначены для протекания разности токов фаз (полюсов) при неравномерной их нагрузке.
43805. Международная экономика 145.69 KB
  Экономическая взаимозависимость имеет прямые последствия для студента, слушающего вводный курс в международную экономику. Как на потребителей, так и на нас могут влиять изменения в интернациональной стоимости валюты. В случае, если японская йена или британский фунт вырастет по отношению к американскому доллару, означает, что цены на японские телевизоры или британские автомобили вырастут.
43806. ПРОЕКТ УЧАСТКА ЛАМИНИРОВАНИЯ ДСтП МОЩНОСТЬЮ 3МИЛ 600 ТЫС М2/ГОД 613.66 KB
  Древесностружечные плиты могут быть изготовлены с заранее заданной плотностью, прочностью и внешним видом, которые требуются в конструкциях, изделиях и деталях. Плитам можно также придать необходимую биостойкость, гидрофобность (водоустойчивость) и огнестойкость.
43807. Выявление взаимосвязи между школьными предметами и возможности реализации межпредметных связей на уроках технологии 1.24 MB
  Современный этап развития науки характеризуется взаимопроникновением наук друг в друга. Связь между учебными предметами является, прежде всего, отражением объективно существующей связи между отдельными науками и связи наук с техникой, с практической деятельностью людей, определяет роль изучаемого предмета в будущей жизни.