А.А. Белеванцев, С.С. Гайсарян, Л.С. Корухова, Е.А. Кузьменкова, В.С. Махнычев - Алгоритмы и алгоритмические языки (1113416), страница 16
Текст из файла (страница 16)
Основным сцензписм непользования является автоматическая Гснсрзция ОдпотипнОГО кода. который нс)келател( но писать вручную, или обеспечение переносимости программы (см. Ниже). Некоторые макросы уже определень( компилятором Си, и их можно использовать В лк)оой про( рзмыс. Как правило, такие макросы содержат информаци(О либо о ~В~ЙСТВЗХ ж)к(пи»»ягора, например. О поддерживаемой им версии Си (к(зкрос ЯТ1)0 '«)ЕЯЯ10)( '), либо о свойствах кОмпилирусмОГО фанлз н окружения и используются при (ЛПЗДКС, ПЗПРИЗ(СР„МЗК))ОСЫ Е1' Е, «.1))Е «0)А«Е Н ДРУГИЕ.
Каждый компилятор часто добавляет сооственияе заранес определенные макросы к стандартным. Например, -'ЛФ-": (((т для компилятора ССС узнать полный список таких макросов можно„запустив команду прспроцсссн))овзния пустого фзй»яа С ЗЗПИСЫО МЩЦ)ОСОВ: ооо -с))Я -Š— < «'КО»У/0011.
Кроыс з)ОГО, препрОцсссор также позвОляст ОрГзнизовз(ь вклк)чсн(гс Оп))сделанных частей файла В Окончательный тскст файла в зависимости от нскОторых условий, Чаще все) О эта возможность служит для повыщсния переносньихтн программы. 1фи п«.рвоначзльной настроике проГраммы на КО)ькретн',~)О архитектуру кОмпь)отсра с пом0(цыо ряда тестов сОздзстся конфигурационный заголоВочный файл, В которок( с помощью «Директив 6 бс б).
00 ')ЗВОдятся имена-макрОсы, Ознзчакяцие наличие или Отсутствие Опрсделснных свойств зрхитстсгуры или Ог)срацноннОЙ (.Нстсмы, Дирс((тивы Ф' 1(зе-."уйе1зе,«йепатй позволяют проверить, определено ли конкретное имя, н в зависимости от этого включить или пе включить текст между $1бооб и Фспц:: т В окончательный текст файла. Вариант с директивой йе1ве позволяет вкл)0чить альтернативный тексг при нсвь)полпенни услОВия, Например, если в конфигурационном файле есть определение Ф()еб»пе КАЧЕ ЕОН0 001)В1Е 1, то СЛЕдУющий фрагмент кода позволяет переносимо определить тип 100«з(ЭЗГ 1).ОЗЗ: ".ур)с()еб 10«по ()ОПЬ10 1опдевб 11оа( ) ,.уре()об оо(»Ь" е 1опдев 110ас; ) '«1 «й иляции яйляет )вочнога ., ф 1 ЮОдер)жаг О( ПРИВЕСТИ К сипя в текст ЫМИ СВЯЗЯМ МН СИТУВЦИЯ жна„через д кнуть.
ВО изб ГЦИЙ Г)РИСК еля1ат упикал 1оча( 3 ся лиш елена. Паприк Г Лв Вшита О с файл ре я переме (М11 Д) ДУ ОТД такой Оп каждОГ мя макр ии, За!Т)ло фУНКЦНЙ, НЕОДНОК ой прагр(ь ЗВГОЛОВ алла В )ЪЯВЛЕНН ОШИ(Ж п))0)Т)аь И МЕЖ двойн рутие за ежание 1: ДЛЯ ЬНО(. и Ь ПРИ !Юр, для учае я баль ельным ЬЛК ЧЕНИ ньге ф ПГЙКИ О ЗВГ ОСГЧ И ЧТО о~ными -':!::;:,'Г~';,!!6: ОВОЧНОГО ССЬ ТСКС стандарт наго Й 1 13, бег Я "~'Й„с; 4 ае з'.
з по ЯТ 1) .' а Н <... тек()т файла аеас(3 Й Компоновп!Ик обеспечивает сборку программь) в едипом ис)талняемам файле из набора объектных файлов. Д'и задания правил коьпц)невки глобальных перемепных и фУНКЦИй НСПОЛЬЗУКПСЯ ПОНЯТИЯ 633))Л3)(333(ЕЙ И ВИЕП(БЕЙ камп01говки (третья сизуация, без компановки, испальзу(тсЯ для локальных и реГисгрОВых переменных, которые не ма) ут быть видимы за пределами теку(цсго файла). Рлабальные переменные, объявленные с квалификатаром ага = Те, подлежи( впугрспней компоновке -- их имена должны бьггь уникальны в пределах файла.
Г:)ооальные статические переменные с Одинаковым именем В ргеи!ых фай3гах разрешены, при компоновке получа~ разньге области за)'Олс файль МОГУ Г Вк)пач СЛОЖИ файла ВОЗМО ВОЗНИ следуто ОПРЕД ПОДКЛ ОПРЕД изац нх Я айл Обь д фаЙ) 1лабал) ные перемеиные, Ооьявленньге без КВВЛИфикатОРВ нли с квалифйкаТаоом ехяеьг), ПОД))сжат внешией компановк(гь Во Всех компонуемых файлах конкретное имя может иметь лишь одна глобальная виеш)(яя Пере~с~~ля. При зтам ).акая перемениая может быть объявле1га В 1гескольких файлах, об~зате~ьна квалификатаром ех, е Яп. Эти обьявлення пе выде))як)г памяти для переменной.
Иа лишь увеломлягот кампи))втор о наличии в статической памя~и перемепнай с апределенпым ~ипам и именем. Ог(реле))епием )лобальной внешнеЙ переменпаи является ее 06)ъяв))ение без квалнфикатора ех .е гп, такое Определеиис може( содержать инициализациго переменной константным выражением и должно быть едииственно для Всех компонуемых файлов. Такое Определение Выделяет неааходимый для переменной объем статической Гтамяти. и Все Объявления зтоЙ г)1обалы(ай перемепнОЙ с квалифпкьчаром ехеегп сс)13!Вкзтся на КГОТ у')веток п~~я~и.
Таким Оаразом, абеспе'(иввется использование одной переменной разными файлами Г!рограм мы. Функции. как и переменньиь должны быль абьявлепы квалификатара е с ат 3. ~ или с квачнфикатором е)' се ' длЯ т01'О, ч)абы их мйжнО было Вызьгвать нз ДруГих файлов (т.н. Вп(,1йние ())ункции). ПО с01лашепиго функции, ш1ределенньге в друГИХ файлах, Объявляк(тся квалификатором ехке и и, как правн)за, Вк)почак)тся В соответствующие заголовочные файлы. Среди камионуемых файлов ма)кет быть лишь единственное определение гио много объявлений) Внешней функции с Данным именеи. Функция же, ОбъяВлеиная или определенная с кВалиф1гкатарам В'";.ВТ .~0, яВляется стаГическай и невидима для функций из дру(их файлов.
Тем не менее, например, она мажет аыть Вызваиа через указате31ь. Переданный В ())ункцик) файла. Раз)) с1цсно Определят ь стати чсск ис ОдннакОВым именем В разных ПРОГраммных ИЗ ДРУ)ОГО функции с файлах, ШЕЙ ПРВКТИКОЙ ПРО)! Раммн функций и глобальных пере) руГих г!))Ограммн)лх файлах. см квалификато))а аг акт о ! . , которые составля)от интерфе ь ОбъЯВлсны как внсшннс.
роваиия генных. пу)кны для д ис пользованн ка)" стати Только ф Йс даннО ческих гс переменные должны Оьп От)г!дко!! называется процесс поиска и удаления ошибок из программы. Как правило, при отладке известны входньш;шнные. На которых программа работает некорректно нли !.енерпрует неверные выходные данные, Основная слОжнос)ь заключа)-.тся в Обнаружении причины нсвернОГО поведения — набора точек программы.
в которых данные обрабатываются неправильно, по ведет к неверному выходу программы, Собственно исправление найденных ошибочных мест программы часто требует меныце усилий. Базовым способом отладки является т.н. 0))иадо!Нш) лачин!ь — Вставка В прои ))амму Операторов, ВИВОдя!цих ш)формацию 0 тскушсм значении пс))сменных проГраммы и принимаемых ск) рсшсниях Отладочп) ю псчк1 ь принято Вьшолнять на стандартный БОчОк ОшибОК.
ДДЯ )удобнОГО включсниЫ)тключения отладочной печати во всей прог))амыс выдачу печаги обы«шо контролируют единь!м макросом. опцией командной строки или переменной окружения. Часто используют разные уровни детализации информации при отладочной пе ати,. также управляемые опш!ями командной строки или переменными окруя!сн)ш.
Основным н!!Струмсптоы о'пчадкн прог))аым Являютс~ гэлц!ПДе!В)г!1 От!!Вэ!Чик позволЯС! Полу~)ать ннформаЦИЮ поведении проГраммы на заданном наборс Входных дан)!Ых, не меняя гв ндсш!ыюм случае) сс пОвсдсння. Как правило, Отладчик запускает программу на заданных Входнь!х данных В управляемом режиме, гюзволяя в любой момент времени остановить или возобновить выполнение, поцгагово (с точносп„о до отдельных строк кода на Си илп ассемолерс целевой машины) выполнять программу, ос:ганавливать выполнснис по достижении заданных точек прОГраммы ~тл!.
шолхи ос)лалоаа) безусловно илн при выполнении нск!Ггорого условия на значения заданных ячеек памяти, ОстшшВливать выполнение при изменен!Ги значения в заданных ячейках памяти !т.н. )почки наблкк)ения), просмагривать или изменять ~ВО Время ОСГВНОВкн Выполнсння) значения перемени)!х, ячеек гшмяти, просматривтгь текущий 0)ск Вь)зовов. ))ужнО Отмстнть, чтО Отладчнк у'правляст проГраммой В Оинарном Виде !Машнн!!Ых кодах и ячсйквх памяти), а прОГраммнсту 1рсоустся получать информацию В терминах п)эограммы я~ык~ Сн Гс)ТЮХ и Операторов исходного кода программы, перемсниых). Для Обеспечения Такой в~~можност~ компилягоры Сн ПО~В~~ЛЮТ !оперировать т.н.
Оэгьлпдочлгю инфо))мпн!ПО, которая устанавливает соответствие между Объекг;)мн программы на Языке Си и объсктамн мшлинной программы, и записыать сс спсциальньш части исполняемо!О файла г!ро!рамь!ы. Без отладочной ии!))ормации пользование отладчиком возможно только на уровне яз),!ка ассемблера. В компиляторе ОСС ~~ладо~ной ннформшп!и вкл!Очастся опцией командной строки -й. Рскомш!Дуется гакжс Отключать Выпо:ц)снис Оптимизаций компилятора с пОмОщью Опции 00, так как построение и поддержание отладочной ннформапии в ходе п1)ОВсдсния Опти)4ж)ацнй компилятором Вяляс Гся весьма 1!стриВнальнОЙ задачей и плОхО 1 С ) ВЬГПОЛНИТЬ ТСКУ1ДУГО СТ1)ОКУ нсхОЛИОГО кзда про!рамыы ~ ОСЗ ЗВХОДГо)' ")ВХОЛОМ В ~ — — В ГО В ")ВГРУЗИТ)г ПД , 'заданнььми комаплнон стрО ! < а Г г„; я: 1)г)~лс1)ягнвпетсяг ком1П)ля)Срами.