Непейвода Н.Н. Программирование. Раздел 4

Непейвода Н.Н. Программирование. Страница 449

Мы рассмотрим многие виды табличных языков, которые подходят для описания различных типов автоматных алгоритмов. А пока займемся реше­нием вопроса о том, как запрограммировать требуемые действия, когда нет возможности воспользоваться таблицей непосредственно. Вот что можно делать с таблицами, представляющими конечный автомат:

приводят лишь к уменьшению наглядности по сравнению с табличным пред­ставлением.

Более технологичный вариант предыдущей программы можно постро­ить, если каждый фрагмент программного кода, который отвечает за реа­лизацию действий, относящихся к разным состояниям (разделы таблицы, помеченные метками состояний), оформить в виде процедуры. Но чтобы не прийти к варианту 1, необходимо помнить, что вызов такой процедуры не должен приводить к выделению для нее собственной (локальной) области памяти — конечный автомат работает с общей памятью!

При использовании многих языков (и систем программирования) выпол­нения этого условия нельзя добиться, и остается только примиряться с тем, что вызовы процедуры приводят к требованиям новой памяти. В качестве средства, пригодного для решения проблемы, обычно предлагается исполь­зовать макрогенерацию (пример — препроцессор С). Для макрогенератора процедуры, им обрабатываемые, становятся макросредствами:

описание процедуры — определение макроса, или, что то же, тело макроса, а

вызов процедуры — макровызов, или, что то же, использование макро­са.

Обработка определения макроса — это создание из тела макроса текстовой заготовки для последующего встраивания ее вместо макровызова (парамет­ризация макросредств, хотя и приводит к затруднениям для препроцессора, также возможна).

Однако внешний для языка препроцессор приводит к большой проблеме, связанной с идентификацией возможных ошибок в теле макросов, посколь­ку препроцессор не в состоянии различать контексты вызова и описания процедур. По этой причине в развитых языках предлагаются иные средства, представляющие собой гибрид между процедурным механизмом и макро­генерацией. В С++/С# это встраиваемые (inline) функции. И именно они наиболее точно применимы для решаемой задачи. Описывать чтолибо вну­три встраиваемых процедур можно, понимая, что при этом образуется лишь собственная область видимости имен, а не область памяти.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама