2845

Интерпретация составных описателей

Контрольная

Информатика, кибернетика и программирование

Интерпретация составных описателей При объявлении переменных, массивов, указателей или функций кроме простых идентификаторов могут использоваться составные описатели. Составной описатель – это идентификатор, дополненный более чем одним признако...

Русский

2012-10-20

36 KB

3 чел.

Интерпретация составных описателей

При объявлении переменных, массивов, указателей или функций кроме простых идентификаторов могут использоваться составные описатели.

Составной описатель – это идентификатор, дополненный более чем одним признаком массива, функции или указателя.

Порядок интерпретации составных описателей.

  1.  В состав любого описателя должен входить идентификатор, он ищется на первом шаге.
  2.  Рассматриваются квадратные (признак массива) и круглые (признак функции) скобки справа от идентификатора, они имеют одинаковый приоритет и интерпретируются слева направо от окончания идентификатора
  3.  Затем справа налево рассматриваются знаки указателя, расположенные слева от идентификатора.
  4.  Интерпретируется спецификация типа идентификатора.

Для изменения порядка интерпретации можно использовать круглые скобки. Если при выполнении пункта 2 справа встречается закрывающая круглая скобка, то нужно переходить к пункту 3 для той части описателя, которая заключена между этой закрывающей круглой скобкой и соответствующей ей открывающей, а затем продолжать интерпретацию, начиная с пункта 2, но уже для объекта, заключённого в круглые скобки.

Пример 1

int (*(*v)[4])[5]

6    4  21 3    5

Идентификатор v (1) – это указатель (2) на массив (3) из 4 указателей (4) на массивы (5) из 5 чисел типа int (6).

Пример 2

float* (*f[4])(int*, char*(*)(float))

11   10 312  4 5     9         6 78

Идентификатор f (1) – это массив (2) из 4 указателей (3) на функции (4), которые принимают в качестве аргументов указатель на число типа int (5) и указатель (6) на функцию (7), принимающую в качестве аргумента переменную типа float (8) и возвращающую указатель типа char (9), и функции (4) возвращают указатели (10) типа float (11).

Описатели с модификаторами

Модификатор – специальное ключевое слово, предназначенное для изменения смысла объявления. Появление модификатора в объявлении является сигналом для компилятора интерпретировать данное объявление некоторым специальным образом. Ранее были рассмотрены модификаторы: auto, extern, register, static, long, short, signed, unsigned, near, far, huge. Рассмотрим дополнительные модификаторы: const, volatile, cdecl, pascal, interrupt. Модификаторы cdecl, pascal, interrupt применимы к функциям и модифицируют смысл их идентификаторов, поэтому должны записываться непосредственно перед идентификаторами. Модификаторы const, volatile, near, far, huge применимы к указателям (первые два применимы и к переменным и массивам, а near и far – к функциям) и воздействуют либо на идентификатор, либо на знак указателя, которому этот модификатор предшествует, и в первом случае он модифицирует объект, именованный идентификатором, а во втором – объект, на который указывает указатель. Модификаторы const и volatile могут записываться и перед спецификацией типа. Допустимо использование в объявлении более одного модификатора.

Пример 3

int const *p1;

int *const p2;

Указатель p1 – указатель на константную переменную типа int (запрещается изменять значение переменной), указатель p2 – константный указатель на переменную типа int (запрещается изменять значение указателя).

Модификаторы const и volatile.

Модификатор const запрещает изменять значение объекта в течении всего времени выполнения программы. Компилятор проверяет все коды программы на попытки изменения объекта и при обнаружении таковых выдаёт сообщение об ошибке.

Модификатор volatile указывает на то, что значение объекта может быть в любой момент времени изменено, причём не только текущей программой, но и любой другой. Значение объекта с данным модификатором при его вхождении в выражения всегда будет читаться из ОЗУ.

Возможно одновременное использование обоих модификаторов. Это означает запрет модификации значений объекта самой программой и разрешение модификации объекта внешними программами.

При применении этих модификаторов к составным объектам их действие распространяется на все компоненты этого объекта.

Модификаторы cdecl и pascal.

При компоновке проекта компоновщик производит сборку объектных модулей проекта (.obj) в единую исполнимую программу (.exe). Объектные модули содержат в себе машинный код, который может быть написан на любом языке программирования высокого уровня (наиболее распространённые языки – C и Pascal), и в принципе сам машинный код зависит от системы команд ЭВМ, а не от языка высокого уровня, на котором написана исходная программа. Однако в деталях существуют отличия:

  1.  Компиляторы языка C добавляют первым символом для всех идентификаторов глобальных объектов символ подчёркивания, то есть их имена в объектном и исходном модулях будут различны. Компиляторы языка Pascal задают идентификаторы глобальных объектов большими буквами и никаких символов к ним не добавляют.
  2.  Компиляторы языка C при вызовах функций их параметры заносят в стек, начиная с последнего. Компиляторы языка Pascal при вызовах функций их параметры заносят в стек, начиная с первого.

В языке Pascal функция не может иметь переменное число параметров.

Модификатор pascal вызывает следующие действия:

  1.  Модифицируемый идентификатор преобразуется к верхнему регистру и перед ним не вставляется символ подчёркивания.
  2.  Если идентификатор – имя функции, то при её вызовах запись в стек значений фактических параметров будет производиться, начиная с первого.

Действия модификатора cdecl приводят к тому, что объект всегда будет обрабатываться по правилам языка C. Он введён в связи с тем, что в компиляторах языка C есть режим, при котором все глобальные объекты обрабатываются по умолчанию по правилам языка Pascal.

Функция main() всегда должна быть описана по правилам языка C, поэтому необходимо использовать для неё модификатор cdecl, если предполагается компиляция программы в режиме языка Pascal.

Все стандартные библиотечные функции объявлены с модификатором cdecl.

Пример 4

int pascal func1(int, float);

int cdecl main (int argc, char *argv[])

Модификатор interrupt.

Предназначен для объявления функций, работающих с векторами прерываний. Для таких функций в точках их вызова и возврата компилятор по сравнению с обычными функциями генерирует дополнительный код – программное сохранение всех регистров процессора в точке вызова и восстановление всех регистров в точке возврата. Модификатор interrupt нельзя использовать вместе с модификаторами near и far.


 

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

46175. Отношение и развитие между людьми в первобытное время. Зарождение искусства, музыки и архитектуры в первобытное время 66.5 KB
  Люди в первобытных общинах были равноправными по своему положению имели одинаковые права и обязанности среди них не было богатых и бедных. Основой существования первобытных коллективов это равные обмены которые имели символистическую опору. Не было излишек все делили поровну для первобытных людей равный обмен помогал в общении. Очень несовершенными были также трудовые навыки и производственный опыт первобытных людей.
46176. Public Relations 47.5 KB
  Цель ПР установление двустороннего общения для выявления общих представлений или общих интересов и достижение взаимопонимания основанного на правде знании и полной информированности. Специалисты ПР используют для наведения мостов и установления взаимопонимания современные методы общения и убеждения. ТЕОРИЯ ОБЩЕНИЯ В философии ПР большое значение придается необходиимости двусторонних отношений. Сейчас эта необходимость признается достаточно широко но как ее достичь Недостаток общения порождает множество случаев непонимания и...
46177. PR - как теория коммуникативного воздействия. PR и другие науки 45 KB
  Для профессиональной практики в сфере связей с общественностью необходимы знания по психологии искусству коммуникации социальной психологии экономики основам менеджмента этики политологии социологии; а также опыт в анализе социальных проблем связям со средствами информации публикацией материалов создания рекламы кинотелематериалов видеосюжетов изучении общественного мнения подготовки презентаций докладов выступлений организации специальных событий. Специалист по PR получает базовую подготовку: в области планирования в...
46178. Глоссарий терминов и понятий института маркетинговых исследований в PR-коммуникации 113.5 KB
  Бюджет маркетинга финансовый план маркетинга система показателей раздел плана маркетинга предприятия в котором в детализированной форме по элементам комплекса маркетинга или по мероприятиям маркетинга приведены величины затрат доходов и прибыли от для осуществления маркетинговой деятельности фирмы. Планирование бюджета маркетинга может основываться на целевой прибыли или исходя из оптимизации прибыли. Основные составляющие затрат на маркетинг: управленческие расходы заработная плата персонала службы маркетинга амортизационные...
46179. Литогенез 211 KB
  Понятие осадочных горных пород.генез совокупность природных процессов образования и последующих изменений осадочных горных пород. Вальтером который выделил в процессе образования осадочных пород 5 основных фаз: выветривание горных пород денудация включая перенос исходного материала осадков отложение диагенез и метаморфизм. В цикле литогенеза различают следующие стадии: 1 образование и мобилизация исходного вещества осадков в процессе физического и химического разрушения материнских пород и его перенос к месту захоронения ...
46180. Структура научно-исследовательской работы. Требования к введению, реферату, основной части и заключению 64 KB
  Структура научно-исследовательской работы. Приложение задачи Введение Данная контрольная работа посвящена теме Структура научно-исследовательской работы. Целью написания данной работы является изучение структурных элементов научно-исследовательской работы.
46181. Анализ отчета о прибылях и убытках ОАО «Заря» 88 KB
  Как видно из таблицы 17, за отчетный период убыток от продаж увеличился на 427 тыс. руб., что является отрицательным моментом в деятельности предприятия. Что касается процентов к уплате, то их величина уменьшилась на 770 тыс. руб
46182. Ветеринарно-санитарная экспертиза продуктов животноводства и гигиены сельскохозяйственных животных 356 KB
  Вынужденный убой животных в вашем хозяйствеместо и способ убоя причины и пути реализации мяса сравните с действующими правилами и сделайте соответствующие выводы. Ветеринарносанитарная экспертиза продуктов убоя животных при отравлении. Вынужденный убой животных в вашем хозяйстве место и способ убоя причины и пути реализации мяса сравните с действующими правилами и сделайте соответствующие выводы.
46183. Гимнастика женщин во второй половине беременности. Лечебная физкультура при язвенной болезни. Упражнения при остеохондрозе 70 KB
  Исходное положение: основная стойка руки на поясе. Исходное положение: основная стойка руки на поясе. Исходное положение: основная стойка руки на поясе. Исходное положение: стоя ноги на ширине плеч руки у груди согнуты в локтях.