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.


 

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

28362. Обязательные наследники: понятие, категории обязательных наследников, размер доли 14.52 KB
  1149 ГК РФ определяет понятие права на обязательную долю в наследственном имуществе т. Право на обязательную долю вопервых не допускает исключения управомоченного лица из числа наследников на основании завещания вовторых не допускает снижения размера доли данного наследника ниже установленного минимума. Право на обязательную долю в наследстве удовлетворяется из оставшейся незавещанной части наследственного имущества даже если это приведет к уменьшению прав других наследников по закону на эту часть имущества а при недостаточности...
28363. Понятие, способы и сроки принятия наследства. Наследственная трансмиссия 14.62 KB
  Понятие способы и сроки принятия наследства. Со дня открытия наследства у наследников появляется право наследования. По своей правовой природе принятие наследства является односторонней сделкой в которой выражается воля наследника по поводу приобретения наследства. Принятие наследником части наследства означает принятие всего причитающегося ему наследства.
28364. Отказ от наследства: понятие, способы и срок отказа. Приращение наследственных долей 14.82 KB
  Отказ от наследства: понятие способы и срок отказа. После открытия наследства у наследника возникает право на принятие наследства. Наследник на свое усмотрение может им воспользоваться а может и совершить отказ от принятия наследства. Если наследник не желает принять наследство или желает от него отказаться то возможен вариант отказа от наследства который влечет за собой так называемое отречение от наследства.
28365. Раздел наследства. Преимущественное право, его реализация 14.85 KB
  Для этого в наследственном праве предусмотрен раздел имущества оставленного наследодателем после его смерти. Раздел имущества может быть осуществлен по письменному соглашению наследников или если между наследниками не достигнуто соглашение и имеются различные споры по данному правоотношению в судебном порядке. С иском в суд может обратиться наследник имеющий право на выделение его наследственной доли из общей массы наследуемого имущества с правом требования выдела в натуре его доли или выплаты другими наследниками денежной суммы...
28366. Охрана наследства и управление им 14.24 KB
  В отношении наследственного имущества может быть осуществлена охрана от возможного посягательства иных лиц не имеющих право на получение данного имущества от возможного расхищения имущества и прочее в интересах наследников отказополучателей кредиторов а также и государства. Охрана наследственного имущества осуществляется посредством применения мер по охране имущества указанных в законе опись сдача имущества на хранение доверительное управление имуществом и др. Охрана наследственного имущества осуществляется нотариусом по месту...
28367. Ответственность наследника по долгам наследодателя 14.42 KB
  эПри принятии наследства наследники могут быть уведомлены о том что наследуемое имущество обременено долгами т. Таким образом после получения наследуемого имущества наследники должны рассчитаться с возможными кредиторами. Наследники вместе несут солидарную ответственность по долгам наследодателя т. Оставшиеся наследники отвечают перед наследником рассчитавшимся с кредиторами как долевые должники.
28368. Особенности наследования отдельных видов имущества 16.61 KB
  В состав наследства участника полного товарищества или товарищества на вере участника ОООили с ДО члена производственного кооператива входит доляпай этого участника в складочном уставном капитале соответствующего товарищества общества или кооператива. В состав наследства вкладчика товарищества на вере входит его доля в складочном капитале этого товарищества. В состав наследства члена потреб.на день открытия наследства зарегистр.
28369. Ограниченные вещные права: понятие, виды, субъекты и объекты 14.35 KB
  Ограниченное вещное право представляет собой право на чужую вещь уже присвоенную др. Ограниченные вещные права связанные с использованием чужих земельных участков: право пожизненного наследуемого владения право граждан на владение и целевое пользование земельным участком передаваемое по наследству; право постоянного бессрочного пользования земельным участком основным отличием которого является то что им может обладать как физическое так и юридическое лицо; сервитуты закрепленные за гражданами и юридическими лицами...
28370. Вещные права юр.лиц. на хозяйствование с имуществом собственника 13.89 KB
  на хозяйствование с имуществом собственника.лиц на хозяйствование с имуществом собственника это 1. Они решают вопросы создания предприятия определения предмета и целей его деятельности его реаорганизации и ликвидации назначают директора осуществляют контроль за исполнением по назначению и сохранностью имущества право на получение части прибыли от использования имущ. Не вправе продавать недвижимое имущество сдавать его в аренду отдавать взалог вносить в качестве вклада в уставной капитал.